Miten tuo olio-ohjelmointi ja luokat oikein toimii PHP:ssä? Mitään en ole saanut toimimaan mitä olen netistä esimerkkejä kopioinut. Esimerkiksi tämä alla oleva ei tulosta mitään muuta kuin virhettä:
class_henkilo.php:
<?php Class Henkilo { var $nimi; var $osoite; var $ika; function AsetaTiedot($uusiNimi,$uusiOsoite,$uusiIka) { $this->nimi=$uusiNimi; $this->osoite=$uusiOsoite; $this->ika=$uusiIka; } function TulostaTiedot() { print "Nimi on $nimi<br>"; print "Osoite on $osoite<br>"; print "Ikä on $ika<br>"; } } ?>
index.php:
<?php require_once("class_henkilo.php"); $uusiHenkilo=new Henkilo; $uusiHenkilo->AsetaTiedot("Nimi1", "Osoite 2 E 30",20); $uusiHenkilo->TulostaTiedot(); ?>
Ei tulosta mitään ja valittaa virhettä, että nuo $nimi, $osoite ja $ika olisivat tyhjiä.
Mutta sitten jos muuttaa niin, että se tallentaa vain yhden muuttujan niin tällein toimii:
$uusiHenkilo->AsetaTiedot = "testi"; $uusiHenkilo->TulostaTiedot(); //tulostaa sanan testi
No nehän ovat. Sen sijaan $this->nimi jne. sisältävät dataa.
Sulla on aika vanhat esimerkit, näyttäs olevan PHP4-ajoilta.
<?php class Henkilo { protected $_nimi; protected $_osoite; protected $_ika; public function __construct($nimi, $osoite, $ika) { $this->_nimi = $nimi; $this->_osoite = $osoite; $this->_ika = $ika; } public function __toString() { return "Nimi: {$this->_nimi}\n" . "Osoite: {$this->_osoite}\n" . "Ikä: {$this->_ika}"; } } $henkilo = new Henkilo("Pekka", "Ohjelmointikuja 6", 18); echo $henkilo; ?>
Yritin löytää googlesta ja putkasta tosiaan vinkkiä miten oliot toimii PHP:ssä ja tuo oli ainoa, jonka löysin. Olen varmaan vähän huono googlettelemaan.
ja kun nyt lisäsin siihen TulostaTiedot-funktioon:
$nimi = $this->nimi; $osoite = $this->osoite; $ika = $this->ika;
niin se lakkasi kokonaan toimimasta. Valittaa, että ei löydä edes koko funktiota. Ehkä vikana sitten on tosiaan, että se on PHP4:n ajoilta ja PHP on jo uudempi. Tsurigan esimerkki kuitenkin toimii erinomaisesti, joten kiitos siitä!
juhaz kirjoitti:
ja kun nyt lisäsin siihen TulostaTiedot-funktioon:
<?php $nimi = $this->nimi; $osoite = $this->osoite; $ika = $this->ika; ?>niin se lakkasi kokonaan toimimasta. Valittaa, että ei löydä edes koko funktiota. Ehkä vikana sitten on tosiaan, että se on PHP4:n ajoilta ja PHP on jo uudempi.
Kyse ei ole PHP:n versiosta, vaan tuossa sijoitat $nimi muuttujaan olion arvon nimi, joten se ei vie juuri puusta pitkään.
tsuriga kirjoitti:
Sulla on aika vanhat esimerkit, näyttäs olevan PHP4-ajoilta.
Kappas vaan. En olekaan tiennyt, että jo php4:ssä oli oliohjelmointimahdollisuus. :O
Mielestäni se tuli vasta php5:dessä.
*facepalm*
Laitetaan kesäloman syyksi, kun järki ei pelaa. Olen käyttänyt oliota aiemmin vain javassa ja sielläkin siitä on jo varmaan vuosi-pari, kun olen viimeksi käyttänyt.
Aihe on jo aika vanha, joten et voi enää vastata siihen.