Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Příspěvky - nullvoid

Stran: [1]
1
Tak jsem příklad ještě trochu upravil a přidal výpisy debug_backtrace(), což činí věci o něco jasnějšími. Vypadá to jednoduše tak, že volání instanční metody statickým způsobem, tj. B::privateWho() je naprosto totožné, jako volání $this->privateWho().
Vkládám zdrojový kód s komentáři, protože sandbox.onlinephpfunctions.com má debug_backtrace() z bezpečnostních důvodů zakázánu.

Kód: [Vybrat]
<?php 
header
("Content-Type: text/plain; charset=utf-8");

class 
{
private function privateWho() {
debug_print_backtrace();
}

public function runFn($fn) {
debug_print_backtrace();
$fn();
}

public function testA() {
debug_print_backtrace();
$this->privateWho();
}

public function testB() {
debug_print_backtrace();
B::privateWho();
}
}

class 
extends {  
public function testC() {
debug_print_backtrace();
B::privateWho();
}
}

$b = new B();

try {   
    
#0  A->privateWho() called at [index.php:16]
    #1  A->testA() called at [index.php:36] 
    
$b->testA();
} catch (
Error $e) {
    echo 
$e->getMessage().PHP_EOL;
}

try {
    
#0  A->privateWho() called at [index.php:21]
    #1  A->testA() called at [index.php:42] 
    
$b->testB();
} catch (
Error $e) {
    echo 
$e->getMessage().PHP_EOL;
}

try {
    
#1  B->testC() called at [index.php:48] 
    
$b->testC();
} catch (
Error $e) {
    
# Call to private method A::privateWho() from context 'B'
    
echo $e->getMessage().PHP_EOL;
}

try {
    
#0  A->runFn(Closure Object ()) called at [index.php:56]
    
$b->runFn(function() { 
        
B::privateWho();
    });
} catch (
Error $e) {
    
# Call to private method A::privateWho() from context ' '
    
echo $e->getMessage().PHP_EOL;
}

2
Na StackOverflow jsem narazil na podobný dotaz

3
V čem je problém? Takových zbytečných ptákovin se dá vymyslet...

Já chápu, že je to nesmyslná konstrukce a blbost, která nemá se skutečným programováním mnoho společného, ale já se jednoduše snažím i v blbostech hledat logiku, což je asi mým prokletím. :(
Omlouvám se tedy za "znečišťování" fóra podobnými nonsensy. Příště se tomu pokusím vyhnout. Díky za pochopení. :)

4
A co přesně by na tom nemělo fungovat?!

Minimálně bych očekával, že se interpretru jazyka nebudou podobné konstrukce zamlouvat a bude o jejich nevhodnosti autora informovat vhodnou hláškou.
Jde mi prostě o to, že použiju-li Potomek::soukromaMetodaRodice() byť v těle veřejné metody rodiče, snažím se o volání metody v kontextu třídy potomka, tedy se snažím volat překrývající implementaci metody v potomkovi, a není-li tam nalezena, použije se metoda rodiče, nebo je-li soukromá, jako v tomto případě, obdržím chybovou hlášku. Možná ale jen  dědičnost a modifikátory přístupu špatně chápu.

5
Zdravím, trochu jsem experimentoval s Late Static Bindings...
Troufám si říct, že jste objevil bug v PHP. Minimálně v tom, že ani mírně rozšířený příklad nehodí error/warning:

Nevím, jestli je to bug, pochybuju o tom, nicméně vaše rozšíření příkladu mě přivedlo k:

Kód: [Vybrat]
class A {
    private $a = "private ";

    private function privateWho() {
        echo $this->a.__CLASS__.PHP_EOL;   
    }
   
    public function test() {
        B::privateWho();   
    }
}

class B extends A {}

$b = new B();
$b->test();          // private A

6
Zdravím, trochu jsem experimentoval s Late Static Bindings a zkoušel různé kombinace použití parent::, self:: a static::, až jsem se dostal k následující podivnosti, která mi neleze do hlavy. Jak je vůbec možné, že script neohlásí žádný warning a ani deprecated hlášku o statickém volání nestatické metody?
V konfiguraci PHP mám error_reporting nastaven na E_ALL. Díky za odpověď.
Kód: [Vybrat]
class A {

    private function privateWho() {
        echo __CLASS__.PHP_EOL;
    }

    public function test() {
        B::privateWho();           // static::privateWho();
    }

}

class B extends A {}


$b = new B();

$b->test();     // vytiskne A

7
Ahoj, vzhledem k tomu, že jde o trochu netradiční poptávku zaměstnání, budu i přesto, že se pokusím o stručnost, asi trochu delší než bych měl.
Je mi jednatřicet let a ve dvaceti jsem odmaturoval na ekonomce. Od té chvíle jsem vystřídal tři zaměstnání. Ve všech třech případech mi šlo především o to, abych si vydělal nějaké peníze a náplň práce pro mě byla do jisté míry vedlejší. První zaměstnání nesouviselo s IT vůbec. Ve druhém jsem se dostal k programování webových aplikací v PHP, ale jelikož jsem byl v téhle oblasti nováček a mnoho jsem toho neuměl, byla to pro mě spíše noční můra. I přesto, že jsem toho o PHP moc nevěděl a frameworky pro mě byly naprostá novinka (Nette tehdy nebylo ještě tak dobře zdokumentováno), vydržel jsem na téhle pozici přibližně dva roky. Nakonec jsem odešel kvůli pocitu, že mi to přerůstá přes hlavu a také kvůli špatné komunikaci se svým šéfem - prakticky nereflektoval mé žádosti, že bych rád absolvoval nějaký kurz.
V současnosti pracuji v neziskové organizaci, kterou založil můj kamarád. Spravuju tři weby běžící na CMS,jsem správce Office 365 pro naši organizaci, občas někomu něco nainstaluju, odinstaluju a často se bohužel dostanu i k práci, která mě baví ještě o něco méně. Jednoduše vím, že tohle už dál dělat nechci.
Všechno, co jsem se naučil o IT, naučil jsem se sám a podle toho to asi taky vypadá. Od všeho umím něco, ale pořádně zřejmě nic. Namátkou zmíním oblasti, ve kterých se orientuju trochu více C, Java, PHP, HTML, CSS, JavScript, SQL, GNU/Linux. Anglicky umím především pasivně a troufám si tvrdit, že vyhledávání potřebných informací pro mě není problém. Nikdy jsem neměl ovšem příležitost pracovat ve firmě, kde bych se postupným získáváním zkušeností stal v určité oblasti "odborníkem". Tohle bych konečně rád změnil a začal dělat práci, která by mě bavila a naplňovala.
Na konec bych rád uvedl jednu podstatnou skutečnost. Nechci v nikom vyvolávat lítost, ale protože jde o poměrně důležitý fakt, který mi brání, abych vykonával práci jinak než z domova, asi by bylo fér, abych ho zmínil hned. Mám poměrně závažné fyzické onemocnění, které mě omezuje v pohybu a nemám-li u sebe osobního asistenta, který mi pomáhá se sebeobsluhou, trávím většinu času doma. Z tohoto důvodu jsem taky svá první dvě zaměstnání vykonával z domova za minimální mzdu. Na současném pracovišti, které mám pár minut od domova, máme osobního asistenta, takže problémy spojené s mým handicapem, řešit nemusím.
Celé jsem to napsal, protože bych zde rád oslovil někoho, kdo by mi chtěl a mohl dát příležitost získat práci, ve které bych se mohl rozvíjet a najít v ní smysl. Chtěl bych zdůraznit, že o peníze mi jde až v druhé řadě, takže budu rád vykonávat práci, která mě baví, za žádnou nebo minimální mzdu a teprve po tom, co bychom společně dospěli k názoru, že práci dělám odpovědně a kvalitně, dohodli bychom se na adekvátním finančním ohodnocení. V první řadě mi jde především o to, abych získal zkušenosti, kterými bych se mohl posléze třeba i dobře živit.
Děkuji všem, kteří to dočetli do konce.

8
Právě to píšou i na výše uvedeném odkazu. Přesto díky za odpověď. sorry za spam.

Stran: [1]