Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: php ja luokat

juhaz [16.06.2009 13:33:43]

#

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

Metabolix [16.06.2009 13:38:38]

#

No nehän ovat. Sen sijaan $this->nimi jne. sisältävät dataa.

tsuriga [16.06.2009 13:41:26]

#

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;

?>

juhaz [16.06.2009 13:48:05]

#

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ä!

Teuro [16.06.2009 13:55:26]

#

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.

jo123 [16.06.2009 13:57:47]

#

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ä.

juhaz [16.06.2009 13:59:52]

#

*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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta