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.