Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: public + __construct => virhe

Sivun loppuun

Vasta_alkaja [06.07.2008 22:09:59]

#

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?

Metabolix [06.07.2008 22:26:20]

#

Millainen virhe tulee, jos teet toisin?

Vasta_alkaja [06.07.2008 22:30:46]

#

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;
}

Wizard [07.07.2008 12:08:05]

#

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()?

reca [07.07.2008 12:39:14]

#

Wizard kirjoitti:

Kutsut metodia Section ... ($this->section)

Eikös tuo $this->section meinaa luokan muuttujaa nimeltä section?

Metabolix [07.07.2008 13:09:10]

#

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.

Vasta_alkaja [07.07.2008 13:42:45]

#

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();

Metabolix [07.07.2008 14:56:35]

#

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?

Vasta_alkaja [07.07.2008 16:52:22]

#

<?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

Teuro [07.07.2008 17:22:53]

#

Sulla on varmaankin jotain vikaa, sillä metabolixin tekemä pätkä toimii hyvin. Codepad.org http://codepad.org/p8NB5Snt suora tulkkaus pastesta.

Chiman [07.07.2008 17:27:33]

#

Entä toimiiko tämä?

<?php
class A {
  function A() {
    echo "(+)\n";
  }
}
new A();
?>

Wizard [07.07.2008 19:42:48]

#

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.

Chiman [07.07.2008 20:52:26]

#

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.

coaster [08.07.2008 13:18:53]

#

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');

?

Vasta_alkaja [08.07.2008 13:56:31]

#

Ja siellähän se vika on - PHP Version 4.4.8


Sivun alkuun

Vastaus

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

Tietoa sivustosta