Minulla oli aikaisemmin luokat tehtynä muotoon :
public function __construct(){ }
Tämä ei kuitenkaan enää toimi, kun olen joutunut vaihtamaan palvelun tarjoajaa.
Siellä tämä on tehvä näin.
function __construct(){ }
Tällä palvelimella on kuitenkin versio 5.2.5. Mistä tämä siis voi johtua?
Osaako kukaan auttaa?
Millainen virhe tulee, jos teet toisin?
Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}'
Tätä rataahan sitten ei toimi myöskään
public function __construct(){ $this->section = empty($_REQUEST['section']) ? 1 : $_REQUEST['section']; } public function Section(){ echo $this->section; }
Sinulla on vikaa jossain muualla.
Lisäksi sinulla on tuossa typo virhe:
public function Section(){ echo $this->section; }
Kutsut metodia Section pienellä ($this->section) jos ei sinulla sitten ole samannimistä metodia pienellä kirjoitettuna. Lisäksi tuo on hieman hämäävä: pitäisikö sen olla esim. parent::section()?
Wizard kirjoitti:
Kutsut metodia Section ... ($this->section)
Eikös tuo $this->section meinaa luokan muuttujaa nimeltä section?
reca kirjoitti:
Eikös tuo $this->section meinaa luokan muuttujaa nimeltä section?
... jolle muuten asetetaan arvo jopa tuossa pastetussa parin rivin koodissa.
Mutta vika tosiaan on jossain muualla.
Vika ei oikeastaan voi olla missään muualla, kuin tässä kohtaa, sillä testasin myös vain tällä olemassa olevalla pätkällä.
public function __construct(){ }
function __construct(){ }
Jos sitten luokan kutsumisessa ei ole jotain vikaa, joka tapahtuu näin.
require_once('.\luokka.class.php'); $jotain = new LuokanNimi();
Et edelleenkään kerro tuon pätkän ympäristöstä mitään. Yleensä syntaksivirheissä olennaisin on juuri se koodin osa, joka on juuri ennen virhekohtaa.
Kokeile nyt vielä ajaa pelkästään tämä koodi publicilla ja ilman:
<?php class A { public function __construct() { echo "(+)\n"; } } new A(); ?>
Tuleeko tosiaan virheitä vai tulostuuko plussa?
<?php class A { public function __construct() { echo "(+)\n"; } } new A(); ?>
Tulos :
Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /polku/public_html/testi.class.php on line 3
<?php class A { function __construct() { echo "(+)\n"; } } new A(); ?>
Tulos = tyhjä sivu
Sulla on varmaankin jotain vikaa, sillä metabolixin tekemä pätkä toimii hyvin. Codepad.org http://codepad.org/p8NB5Snt suora tulkkaus pastesta.
Entä toimiiko tämä?
<?php class A { function A() { echo "(+)\n"; } } new A(); ?>
Kokeilepa katsoa luokan tiedoston tallennusmuotoa sekä tarkasta, että tiedostossa ei todellakaan ole mitään muuta kuin PHP koodia ENNEN tuota luokkakoodia.
Samalla myös tarkista mitä php versiota palvelin OIKEASTI AJAA. Eli phpinfo(); kehiin ja siitä poimi PHP versio. Kovasti haiskahtaa kaikesta huolimatta PHP 4.x.x versiolta virheilmoituksen takia. Palvelin voi olla väärin säädetty tai väärin käännetty ja jostain syystä PHP4 versio on edelleen päällä. Tämä on yleistä joillakin operaattoreilla, koska he asentavat PHP:n hieman oudolla tavalla (lue: ei ole asiantuntemusta riittävästi).
Voisin lyödä vetoa, että PHP versio on 4.x.x.... ;)
-W-
Ps. kiinnitä jatkossa enemmän huomiota luokkien ja muuttujien nimeämiseen. Muuttuja ja metodi = samannimisiä => ei hyvä. Helpottaa nimittäin jälkeenpäin tarkastelua kummasti.
Wizard kirjoitti:
Voisin lyödä vetoa, että PHP versio on 4.x.x.... ;)
Saman aavistuksen takia laitoin äskeisen testivinkin.
Tyhjä sivu aiemmasta testistä viittaa siihen, ettei mitään tulostu. Mitään ei tulostu, jos __construct-funktiota ei suoriteta. Koska uusi olio kuitenkin luodaan, suorituksen pitäisi mennä __constructiin, jos PHP-versio on 5.
Vasta_alkaja kirjoitti:
Jos sitten luokan kutsumisessa ei ole jotain vikaa, joka tapahtuu näin.
require_once('.\luokka.class.php');
pitäiskö olla
require_once('./luokka.class.php');
?
Ja siellähän se vika on - PHP Version 4.4.8
Aihe on jo aika vanha, joten et voi enää vastata siihen.