Hi PHP-hulpers,

Ik heb een parent class die doormiddel van een private methode een andere child class aanmaakt. De child class extends de parent class.

Vervolgens voer ik in de child class een methode uit die gedefineerd wordt in de parent class. In die methode wordt een property gebruikt uit de parent class die in de __construct van de parent class wordt ingesteld op: $this->ch = curl_init();

Eerder genoemde methode (gedefineerd in de parent class) gebruikt $this->ch voor het uitvoeren van een aantal curl_exec's. Wanneer ik de methode echter probeer uit te voeren krijg ik de foutmelding dat $this->ch = NULL en dus !niet een resource voor curl is. Dit blijkt ook wanneer ik in de child class var_dump($this->ch); uitvoer.

Hoe kan ik de methode uit de parent class toch gewoon gebruiken in de child class?
parent::__construct uitvoeren in de child class is geen optie. Via een andere methode die in de __construct van de parent class wordt aangeroepen wordt namelijk de child class geladen. Oftewel, de child class wordt dan een tweede keer geïnitialiseerd en die ïnitialiseerd de child class weer enz., enz.
De $this->ch in de child class pas instellen op $this->ch = curl kan ook niet omdat in de parent class $this->ch al nodig is en $this->ch in de child class met deze curl_session moet draaien.

Hieronder nog even een (vereenvoudigde) weergave ter verduidelijking:

[size=120]parent.class.php[/size]
<?php
class Parent{
    protected $ch;

    function __construct(){
        $this->ch = curl_init();
        loadClass();
    }

    private function loadClass(){
        include('apps/'.$_GET['app'].'/lib/class.php');
        return new $_GET['app'];
    }

    public function curlGet($url){
        curl_setop($this->ch, CURLOPT_URL, $url);                     // error child.class.php verwijs naar deze lijn
        curl_setop($this->ch, CURLOPT_RETURNTRANSFER, true);  // error child.class.php verwijs naar deze lijn
        return(curl_exec($this->ch));
    }
}
?>

[size=120]child.class.php[/size]
<?php
class Child extends Parent{
    function __construct(){
        curlGet($url);    // error: PHP Warning:  curl_setopt() expects parameter 1 to be resource, null given in Parent.class.php on line 16 & 17
    }
}
?>


Ik hoop dat iemand me met bovenstaande vraag kan helpen.

Alvast bedankt voor jullie hulp en tijd,
Wilfred Dijksman
@Tim Slootweg: Ik gebruik vanuit de child class idd methodes en properties uit de parent class. Begrijp ik OOP verkeerd of begreep je mij verkeerd? (aangezien dit deel van de opbouw van mijn code me nou net wel logisch leek ;)
Ik had het al gewijzigd, ik had niet goed gelezen...
Even off-topic: hoe wijzig je je reactie in vredesnaam? Er zit een post tussen van mij waar ik het probeer, maar dan gaat hij telkens het orgineel citeren (ook als ik dit in de editor weg haal). Dit terwijl het wijzigen me eerder wel gelukt is…
[offtopic]door op het notitie icoontje rechtsbovenin je bericht te klikken[/offtopic]
Ik had laatst ook een citaat van me bericht vreemd idd. Wat je nog wel kan doen om het overzichtelijker te maken in je code is gewoon setters gebruiken ipv alles in de __construct doen.


<?php
$this->app = new $nameClass($this);
//wordt dan
$app = new $nameClass();
$app->setParent_Object($this);
$this->app = $app;
?>
Tim, zodra een klasse iets nodig heeft om te werken is het toch echt beter om dit via een constructor te doen. Zijn taak is het om een klasse klaar te maken om te werken. Zodra iets niet per se nodig is voor het functioneren van een klasse gebruik je setters.

Tevens vind ik deze volgorde mooier:
<?php
$this->app = $app = new $nameClass();
$app->setParentObject($this);
?>
Ja idd.

[size=xsmall]Toevoeging op 03/02/2013 00:13:20:[/size]

behalve als je veel attributen moet zetten, dan lijkt het mij beter om het via setters te doen.

Reageren