Vlákno názorů k článku Na co si dát pozor při práci s objekty v PHP od luda - tohle ma byt oop? opravdu dobry ftip a k...

  • Článek je starý, nové názory již nelze přidávat.
  • 9. 10. 2003 0:16

    luda (neregistrovaný)

    tohle ma byt oop? opravdu dobry ftip
    a k posledni vete, ze to vylozene nestezuje objektove programovani - ne opravdu ne, zvyknout se da na vse, ale pokud neni mozne zapouzdreni (odizolovani private atributu a metod), tak k cemu to vlastne je?

  • 9. 10. 2003 0:20

    luda (neregistrovaný)

    mozna ze v php verze 10 uz se budou objekty chovat tak je ocekavano, ale to nezbyde chudakum vyvojarum nic jineho, nez to zase cele (po kolikate uz?) prepsat

    no mozna je to trest za volbu tohoto "jazyka"

  • 9. 10. 2003 9:05

    RWS (neregistrovaný)

    Jojo, PHP4 v zadnym pripade neni OOP, staci se jenom podivat na nemoznost rozliseni jestli promenna obsahuje objekt nebo referenci na objekt. A takovych veci je vic, ale prej PHP5 uz bude hodne lepsi na objekty, tak uvidime.

    Ke skryvani promennych: ani by to nebylo moc super, protoze PHP (v4) jaksi nedokaze udelat $objekt->metoda1()->metoda2(), takze je nutne bud pouzit X promennych na docasne ulozeni objektu vracenych metodou1 a nebo, pokud metoda1 vraci objekt, ktery je nejakym zpusobem ulozeny v objektu $objekt, tak pristupovat primo na tu promennou. Az bude PHP umet tohle, tak muze skryvat promenne.

    Jinak PHP ma rekl bych hodne bugu v docela zakladnich akcich, problem je, ze pro male skriptiky se asi moc neprojevi. Mam napriklad nasledujici kod
    =====
    class A {
    var $ch=array();
    function __construct() {
    }
    function A() {
    $this->__construct();
    }
    }

    class B extends A {
    function B() {
    echo gettype($this->ch);
    parent::__construct();
    }
    }

    $b=&new B();
    =====

    samozrejme takhle napsanej skriptik vypise typ "array()". V nasem programu (takovy trosku vetsi projekt) mi to normalne taky nechava v promenne $ch array, ale v urcitym pripade mi to tam nastavi kdo vi co a je tam "unknown type" (var_dump rika "&UNKNOWN:0"). Pritom kdyz do tridu A upravim takhle

    ===
    class A {
    var $ch=array();
    function __construct() {
    $this->ch=1;
    echo "trida A";
    }
    }
    ===

    tak se mi uz v konstruktoru B() vypise "array()" a pak se vypise text "trida A", cili staci pridat pouze kod na prirazeni do promenne a uz to uvlivni, ze pri vytvareni objektu (PHPckem) se vlozi spravne array do promenne $ch (ktery je pak samozrejme prepsan cislem 1). Proste docela takovej bordel.

  • 10. 10. 2003 20:15

    Jirka Reznicek (neregistrovaný)

    Myslim, ze v dokumentaci se pise, ze k inicializaci promennych se mohou pouzit pouze konstantni vyrazy, coz funkce nejsou. Cili pokud inicializujete pomoci "array()", nedivte se, ze to bude delat skopicarny.

  • 10. 10. 2003 20:25

    Miloslav Ponkrác (neregistrovaný)

    Výraz array() není funkce, ale jazykový konstrukt, jak se píše v dokumentaci, tudíž i tato námitka je trochu diskutabilní. Teoreticky by to tedy měl být skutečně konstantní výraz.

    Já si spíš myslím, že prostě je PHP trochu nedomyšlené, a mnohdy ani PHP neví, kam co patří.

    On totiž samotný PHP jazyk se mnohdy skutečně chová dost překvapivě. Sám jsem toho v PHP napsal hodně, a leckdy využívám věci z PHP až do vyždímání z poslední kapky. A leckdy chování PHP odhaduji stylem: "Kdybych byl autor PHP, tak bych asi tuto funkci napsal v C takto. A chovalo by se to asi takto." Tedy odhaduji vnitřní algoritmy.

    Osobně považuji za nejlepší strategii nevyužívat PHP naplno. A vyzkoušení je k ničemu, protože to pak v jiné verzi PHP často funguje trochu odlišně.

  • 9. 10. 2003 14:27

    Jakub Hegenbart (neregistrovaný)

    Ach jo. Uz zase nekdo misinterpretuje zapouzdreni (a nejspise nejen to)...lidi, ten termin je preci o necem uplne jinem nez "private" a "public." Ostatne PHP neni samo, zadny jazyk, ktery podporuje "public" promenne (treba C++ nebo Java) nezapoudruje tak, jak by podle OOP mel (samozrejme z duvodu implementacni efektivity - to neznamena, ze jazyk je spatny - jen neni OO v tom nejprisnejsim slova smyslu)

  • 10. 10. 2003 8:49

    Roman Pichlík (neregistrovaný)

    Zajimalo by me jak se v PHP pretypuje z jednoho objektu na druhy. Treba z objektu Zidle na obecnejsi Nabytek. Pokud to nejde ztratil jsem posledni kapku v implementaci OOP v PHP 4.x

  • 10. 10. 2003 20:30

    Miloslav Ponkrác (neregistrovaný)

    V PHP typy objektů de facto neexistují. Prostě objekt je halda atributů a halda metod. A název třídy je de facto jen skrytý atribut.

    Takže přetypování není potřeba. Prostě tam dosadíte objekt jiné třídy, který má potřebné atributy a metody, dokonce nemusí být ani v dědické linii. A bude to fungovat.

    Mě se to sice nelíbí, ale takto to je. Na druhé straně je to dost flexibilní. Dokonce si můžete vytvářet dočasné třídy, aniž byste psal kód.