PHP: No parent class in this context?

Pagina: 1
Acties:

  • EyE
  • Registratie: Mei 2000
  • Laatst online: 28-08 20:25
Heb een extensie van een klasse gemaakt en wil wat functies uit de parent-class aanroepen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?
include("DevTools/ComponentInfo.php");

class SiteStructureExplorerInfo extends ComponentInfo {
  function SiteStructureExplorerInfo() {
/*    parent::ComponentInfo("SiteStructureExplorer", "247Spark+", "0.2.1", "beta", "SiteStructureExplorer builds a tree showing the structure of a site, as generated by the SiteGenerator. It will allow the user to click on action-icons.");
    parent::addVersionHistory("0.1", "12-01-2001", "Simple generation of a Windows-Eplorer-like tree");
    parent::addVersionHistory("0.2", "15-01-2001", "A testtree shows the real contents of a site");
*/
    $this->ComponentInfo("SiteStructureExplorer", "247Spark+", "0.2.1", "beta", "SiteStructureExplorer builds a tree showing the structure of a site, as generated by the SiteGenerator. It will allow the user to click on action-icons.");
    $this->addVersionHistory("0.1", "12-01-2001", "Simple generation of a Windows-Eplorer-like tree");
    $this->addVersionHistory("0.2", "15-01-2001", "A testtree shows the real contents of a site");
  }
}
?>

Natuurlijk kan het met $this-> wel, maar parent:: leek me netter, maar dan weet PHP niet wat de parent class is:
Fatal error: No parent class available in this context in explorer/SiteStructureExplorerInfo.php on line 6

Komt dit doordat parent:: (of eventueel ComponentInfo::) in feite static functions zijn?

Verwijderd

parent:: is allemaal commentaar, heeft misschien zin om /* en */ weg te halen? of is het de bedoeling dat die gebecommentaard (1 woord :)) zijn?

  • EyE
  • Registratie: Mei 2000
  • Laatst online: 28-08 20:25
Op donderdag 17 januari 2002 15:07 schreef jurriebur het volgende:
parent:: is allemaal commentaar, heeft misschien zin om /* en */ weg te halen?
|:(
* EyE voelt zich nu een beetje op z'n ziel getrapt, dat zoiets doms verondersteld wordt
of is het de bedoeling dat die gebecommentaard (1 woord :)) zijn?
pcies! :) ik denk, ik laat het in 1 code zien

Verwijderd

Op donderdag 17 januari 2002 15:20 schreef EyE het volgende:

[..]

|:(
* EyE voelt zich nu een beetje op z'n ziel getrapt, dat zoiets doms verondersteld wordt
[..]

pcies! :) ik denk, ik laat het in 1 code zien
Het spijt mij uit het diepste van mijn hart :)
helaas heb ik geen oplossing, sorry...

  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 14-09 09:56
Hey Eye,

De parent-constructie is relatief nieuw. Het zou kunnen dat het niet niet geheel goed geimplementeerd is. Zo wordt in php 4.0.1lp2 bijvoorbeeld wel de ::-notatie ondersteunt, maar zal php het stuk "parent::" als de naam van de klasse zien. In de manual wordt het gebruik van parent overigens wel aangeraden... hoewel er verder eigenlijk niet veel over limitaties van parent en/of constructors in staat.

Hoewel de ::-notatie op C's static notatie lijkt, is dit in php niet helemaal het geval. Het is afhankelijk van de context (en daar wordt in je foutmelding ook op gehamerd). Wordt de aanroep gedaan vanuit een derived class (en dus eigenlijk "this" bestaat), dan is het geen statische aanroep. Wordt de aanroep buiten een dergelijke context gedaan, dan wordt het als statisch aangezien.

Test het volgende voorbeeld maar uit, dan zie je dat wel:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?
class TestBase
{
    var $str = 'Param: ';
    
    function TestBase($param)
    {
        echo "$this->str$param\n";
    }
}



class TestDerived extends TestBase
{
    function TestDerived()
    {
        TestBase::TestBase('ClassName');
    /*parent::TestBase('parent');*/
        $this->TestBase('this');
    }
}


$test = new TestDerrived;
TestBase::TestBase('direct');
?>

Op bugs.php.net en zie een lijst van gefixte "parent" bugs... zo te zien zo rond php 4.0.4, dus als je nog een oudere versie hebt?

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


  • EyE
  • Registratie: Mei 2000
  • Laatst online: 28-08 20:25
Op donderdag 17 januari 2002 22:03 schreef Infinitive het volgende:
Op bugs.php.net en zie een lijst van gefixte "parent" bugs... zo te zien zo rond php 4.0.4, dus als je nog een oudere versie hebt?
heb net een half uurtje in die bugs zitten neuzen, en idd:
http://bugs.php.net/bug.php?id=11073
http://bugs.php.net/bug.php?id=13882

je was me net voor met dit hier te posten :)

[private modus]PHP-upgrade dus; regel jij dat zaterdag met Michel even >:) [/private modus]
Pagina: 1