cUrl gebruiken vanuit child class

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Full stack Javascript ontwikkelaar

Functie Benieuwd hoe jouw dag eruit ziet? Je komt binnen rond een uur of 10 en dat start je met de morning call. Dit doen we vanaf het hoofdkantoor of op het lab, ligt eraan welk project je mee bezig bent. Na de call en het verdelen van de tickets ga je met je team aan de slag. Rond een uur of 12 is er een goede lunch en ga je smiddags weer lekker door met je werk. De ene keer maak jij een game voor een groot merk om de interactie tussen product en eindgebruiker te vergroten. De andere

Bekijk vacature »

IoT Software Developer PHP

Functie omschrijving Voor een klein softwarebedrijf in Breda, zijn wij op zoek naar een IoT software developer met kennis van PHP. In deze rol wordt je verantwoordelijk voor het vernieuwen van het multimedia platform van een super tof bedrijf in Breda. Je gebruikt PHP als programmeerlaag, en bent in staat om de helicopterview te pakken / projectmatig te werken. Jouw werkzaamheden zien er als volgt uit: Je gaat aan de slag met de ontwikkeling en vernieuwing van het "intern" ontwikkelde multimedia platform. Je neemt de lead in het moderniseren van het platform door het deels opnieuw op te zetten of

Bekijk vacature »

Medior/Senior Python developer

Functie Jij als Senior Python developer hebt al ruime ervaring opgedaan. Bedrijven komen bij de organisatie om technische vraagstukken op te lossen. Jij als specialist bent dus de representatie van deze kwaliteit. Je zult de keuze krijgen tussen lange of korte projecten waarin je komt te werken in multidisciplinaire teams. Projecten die je gaat uitvoeren zijn zeer uitlopend. Zodoende kun je aan de ene kant kiezen voor een greenfield project en stroom je bij een ander project midden in een migratietraject in. Voor de ene klant ontwikkel je ene nieuwe portal en voor het andere project duik je veel meer

Bekijk vacature »

Senior .NET Ontwikkelaar

In het kort Als Senior .NET ontwikkelaar ga je binnen onze business unit Transport en Logistiek aan de slag met complexe maatwerk software voor bedrijf kritische systemen binnen de technische automatisering. Denk bijvoorbeeld een IoT-oplossing voor de logistieke sector waarbij we van ruim 200.000 machines de telemetrie en events verwerken. We zijn actief in de distributielogistiek, havenlogistiek (denk aan ECT) en productielogistiek. Naast C# en .NET Core maken we ook gebruik van Azure technologie. En als trotse Microsoft Gold Partner leren we graag van en met jou. Wil jij jezelf blijven ontwikkelen binnen de technische automatisering met .NET, dan gaan

Bekijk vacature »

Back end developer PHP, Laravel

Functie Jij komt te werken in ons webdevelopment team, wat bestaat uit 8 ervaren collega’s. Hiernaast hebben wij nog een team van 2 ontwikkelaars die aan native applicaties werken. Bij ons zijn er korte lijntjes en er hangt een gezellige informele werksfeer. Maar het belangrijkste is natuurlijk dat je aan geweldige applicaties zult gaan werken! Wij willen als organisatie niet te groot worden, we willen gewoon toffe dingen maken. Onze techstack bestaat momenteel uit: PHP, Laravel, Javascript, Typescript, Git, MySQL, Java, Kotlin, Xamarin. Samen met ons ga jij zorgen dat we puik werk leveren! Waarbij je bij elke fase in

Bekijk vacature »

.NET developer

Functie Heb jij veel kennis van ASP.NET Webforms en wil jij juist de overstap maken naar ASP.NET Core? Wij zijn per direct op zoek naar een ervaren .NET Webdeveloper die met ons samen ons platform wilt herschrijven van ASP.NET Webforms naar ASP.NET Core. Voor jou de unieke kans om met ons samen te innoveren en kennis op te doen van de nieuwste technieken binnen de Microsoft Stack. Wij hebben een development team met 10 IT specialisten bestaande uit onder andere 4 backend .NET developers en twee front-end developers. Wij zijn continu bezig om ons als team en bedrijf te blijven

Bekijk vacature »

3D BIM Add-on Developer

As a 3D BIM add- on developer at KUBUS, you will develop add-ons (called BCF- Managers) to the leading building information modeling (BIM) programs Revit, Navisworks, Archicad, AutoCAD and Tekla Structures. BCF Managers enable data transfer between BIM software and BIMcollab. You will work on both the front- and the back-end. As a software company, KUBUS is in a unique position. We build our own products that are used by tens of thousands of users worldwide. Our company is just the right size: big enough to make a real impact in the market, but small enough that as an individual

Bekijk vacature »

Junior Java Developer

Dit ga je doen Full stack web- en appdevelopment; Vertalen van de functionele wensen naar de technische specificaties; Sturing geven aan/klank board zijn voor de software teams; Trainen van de software teams; Sparren met klanten; Meedenken over architectuur. Hier ga je werken De organisatie is een bureau welke websites en mobiele applicaties bouwt voor verschillende toonaangevende organisaties. Hierbij richten zij zich voornamelijk op de sectoren leisure, overheid en zorg. De sfeer intern kenmerkt zich door informaliteit, gezelligheid en ambitie. Ze werken dag in dag uit samen om mooie producten op te leveren voor hun klanten. Op dit moment zijn er

Bekijk vacature »

Functioneel Applicatiebeheerder

Wij van CNB zijn op zoek naar een leergierige Functioneel Applicatiebeheerder CNB is de grootste dienstverlener in de markt van bloembollen en vaste planten. In deze markt verricht CNB de volgende diensten: bemiddeling, veilen en het koelen en prepareren van bloembollen. Vanuit ons hoofdkantoor in Lisse werken bijna 100 collega’s dag in dag uit aan de bemiddeling van bloembollen. In Bovenkarspel vindt het koelen en prepareren van de bloembollen plaats. Wij zijn op zoek naar een enthousiaste Functioneel Applicatiebeheerder die naast een applicatie, ook sfeer kan bouwen! Jij: Vindt het leuk om binnen een klein IT-team aan de slag te

Bekijk vacature »

Software Developer Mendix / Maatschappelijk Betrok

Dit ga je doen Het bouwen van de Mendix applicaties in samenwerking met jouw team of zelfstandig; Werken met Scrum methodiek; Ontwikkelen van vooruitstrevende oplossingen; Meedenken over nieuwe applicaties en ontwikkelingen; On the job eigen maken van de Mendix omgeving. Hier ga je werken Deze dynamische en snelgroeiende organisatie begeeft zich in de recyclingbranche. Zij nemen op duurzame en efficiënte manier de recycling op zich. Vanwege hun snelle groei zijn zij op zoek naar een young professional die zich graag wilt ontwikkelen als Mendix Developer. Je komt te werken binnen een IT team van +/- 15 medewerkers. Het huidige ‘vaste’

Bekijk vacature »

Social Media Specialist

Social Media Specialist locatie: Rotterdam (Zuid Holland) Wij zoeken op korte termijn een nieuwe collega, een social media specialist/ adviseur sociale media (24 uur), voor ons sprankelende team Communicatie van CJG Rijnmond. Onze focus ligt op het informeren en binden van onze in- en externe klanten en stakeholders en het versterken van onze naamsbekendheid en zichtbaarheid. Dat doen we in nauwe samenwerking met elkaar. Over de functie Ons team bestaat uit 7 communicatieprofessionals met ieder een eigen expertise. Als lid van het online team ben je verantwoordelijk voor het ontwikkelen, uitvoeren en analyseren van onze socialemediastrategie. Ook stel je campagnes

Bekijk vacature »

Front-end Developer

Functie omschrijving Wij zijn op zoek naar een Front-end Developer! Als Front-end Developer binnen dit softwarebedrijf ga je de frontends voor zowel je eigen interne projecten als die voor klanten opzetten, onderhouden en uitbreiden. Je zet ideeën om naar mooie successen voor de klanten. Dat is in een notendop wat je gaat doen! Wat kun je verwachten? Je werkt aan de doorontwikkeling van bestaande maatwerkapplicaties. Bijvoorbeeld wanneer de klant de applicatie wil uitbreiden met een nieuwe feature; Samen met het team van backenders en desginers zet je nieuwe ideeën van klanten om naar mooie oplossingen; Je werkt met verschillende frameworks.

Bekijk vacature »

No-Code Betty Blocks ontwikkelaar

Bedrijfsomschrijving Wil jij de bedrijfsprocessen van klanten revolutionair digitaliseren en optimaliseren zonder beperkt te worden door programmeertalen? Kom werken bij een snelgroeiende en professionele organisatie met een gezonde dosis humor en veel vrijheid om jezelf te ontwikkelen. Als No-Code Betty Blocks ontwikkelaar werk je vanuit ons kantoor in het hart van Nederland, je thuiswerkplek of op locatie bij de klant. We faciliteren de juiste trainingen en ondersteuning zodat je een echte Betty Blocks expert wordt. Naast het werk zijn er bij ons bijzondere events, zoals een jaarlijkse zeildag, een zomerse barbecue en een knus kerstdiner om de grillige maanden door

Bekijk vacature »

Ventilatiesysteem Productontwikkelaar HBO WO Verwa

Samengevat: Zij bieden flexibele ventilatiematerialen, geluidsdempers, rookgasafvoer producten en industrieslangen. Ben jij een technisch productontwikkelaar? Heb jij ervaring met het ontwikkelen van nieuwe producten? Vaste baan: Technisch Productontwikkelaar HBO WO €3.000 - €4.000 Zij bieden een variëteit aan flexibele ventilatiematerialen, geluiddempers, rookgasafvoer producten, industrieslangen en ventilatieslangen voor de scheepsbouw. Met slimme en innovatieve materialen zorgen wij voor een gezonde en frisse leefomgeving. Deze werkgever is een organisatie die volop in ontwikkeling is met hardwerkende collega's. Dit geeft goede ontwikkelingsmogelijkheden. De branche van dit bedrijf is Techniek en Engineering. Functie: Voor de vacature als Technisch Productontwikkelaar Ede Gld HBO WO ga

Bekijk vacature »

C# .NET Developer

Functie omschrijving Wij zijn op zoek naar een C# .NET Developer voor een bedrijf in de omgeving van Utrecht! Wil jij werken voor een internationaal bedrijf waar je legio mogelijkheden krijgt als Software Ontwikkelaar? Grijp nu je kans! Je kunt een uitdagende rol gaan vervullen als C#.NET Developer binnen een internationaal bedrijf dat gevestigd is in omgeving van Utrecht. Je zult gaan samenwerken met collega's die over de hele wereld verspreid zitten. Dit bedrijf is zeer vooruitstrevend en werkt met de nieuwste technieken. Als C#.NET Developer ga jij je bezig houden met het volgende: Je blijft op de hoogte van

Bekijk vacature »

Pagina: 1 2 volgende »

Wilfred Dijksman

Wilfred Dijksman

30/01/2013 22:30:30
Quote Anchor link
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:

parent.class.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
classParent{
protected$ch;

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


privatefunctionloadClass(){
include('apps/'.$_GET['app'].'/lib/class.php');
returnnew$_GET['app'];
}


publicfunctioncurlGet($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));
}
}

?>

child.class.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
classChildextendsParent{
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
Gewijzigd op 30/01/2013 22:31:07 door Wilfred Dijksman
 
PHP hulp

PHP hulp

28/11/2024 14:00:16
 
Erwin H

Erwin H

30/01/2013 22:47:30
Quote Anchor link
Ergens krijg ik het vermoeden dat je opbouw van de classes dus echt verkeerd is als je met dit soort problemen te maken krijgt. Een parent die een child maakt van zichzelf.... klinkt als onwenselijk (behalve als je gewoon een levend wezen bent dan).

Maar een mogelijke oplossing van je probleem.
Laat de construct niet direct die curl property aanmaken, maar een getter ervoor. Check in die getter of de variabele al is geinitialiseerd of niet en maak aan indien nodig:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
class Parent{
    private $ch;

    protected function getCh(){
        if ( $this->ch == null ){
            $this->ch = curl_init();
        }

        return $this->ch;
    }
}

?>

(een reden temeer om al je properties private te hebben en altijd op vragen via een getter)
Gewijzigd op 30/01/2013 22:48:46 door Erwin H
 
Wilfred Dijksman

Wilfred Dijksman

31/01/2013 00:33:35
Quote Anchor link
Hi Erwin,

Ik moet inderdaad toegeven dat mijn code hoogst waarschijnlijk niet 'helemaal' optimaal is ;) (hobby/beginner (qua OOP)). De situatie zoals jij deze beschrijft (parent die een child maakt van zichzelf) doet zich gelukkig niet voor. De parent class heeft een methode die wordt aangeroepen via de __construct en die een nieuwe child class aanmaakt.

Over je mogelijke oplossing:
Probleem wordt dan dat er meerdere cUrl sessies komen omdat $this->ch dan twee keer wordt ingesteld op curl_init(); Voor de werking van het systeem is één dezelfde sessie in cUrl vereist (cUrl logt in de parent class in op een systeem en haalt in de child class data op uit datzelfde systeem. Dit moet in dezelfde cUrl sessie gebeuren omdat anders de login die cUrl heeft gedaan in de parent class verlopen is.).

Is het trouwens raar dat de property $this->ch; niet wordt mee genomen naar een child class (die ge-extends is)? Want als dat zo is moet de indeling veranderen en moet ik/we niet allemaal functies erbij gaan halen.

Overigens had ik over getters wel eens eerder gelezen. Ga ik in het vervolg op proberen te letten!

In ieder geval bedankt voor je hulp tot zover. Met de getters is mijn code er in ieder geval weer iets beter op geworden ;) Mocht je nog een idee hebben dan hoor ik het graag.

Met vriendelijke groet,
Wilfred Dijksman
 
Koen Vlaswinkel

Koen Vlaswinkel

31/01/2013 07:20:58
Quote Anchor link
Je moet wel bedenken dat een constructor van de parent niet automatisch wordt aangeroepen. Daarvoor gebruik je parent::__construct(); in de constructor van de child class.
Gewijzigd op 31/01/2013 07:21:48 door Koen Vlaswinkel
 
Wouter J

Wouter J

31/01/2013 09:13:44
Quote Anchor link
Quote:
Je moet wel bedenken dat een constructor van de parent niet automatisch wordt aangeroepen. Daarvoor gebruik je parent::__construct(); in de constructor van de child class.

Oh? Waar haal je dat vandaan?
 
Koen Vlaswinkel

Koen Vlaswinkel

31/01/2013 10:11:53
Quote Anchor link
Alleen als je zelf een constructor maakt in de child class, dus in dit geval wel. Hier override je de constructor, dus moet je de parent constructor wel callen in dit geval.
 
Wilfred Dijksman

Wilfred Dijksman

31/01/2013 10:28:46
Quote Anchor link
Wilfred Dijksman op 30/01/2013 22:30:30:
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.


Zoals ik in me eerste post al schreef is het aanroepen van parent::__construct helaas geen oplossing.

In ieder geval bedankt voor het mee denken! Wel raar trouwens dat je de __construct overwrite als je child class ook een construct heeft. Het komt er in de praktijk dus op neer dat extends alleen maar de methodes en properties meeneem, maar niet de waarde van de properties die ze tijdens het initialiseren van de parent class al hebben gekregen. Laat dat nou net zijn wat ik wel nodig heb :(

Iemand nog een idee?

Met vriendelijke groet,
Wilfred Dijksman
Gewijzigd op 31/01/2013 10:30:19 door Wilfred Dijksman
 
Wouter J

Wouter J

31/01/2013 11:01:43
Quote Anchor link
Waarom is parent::__construct geen oplossing? Tevens vind ik het nog steeds vreemd dat de parent een child aanmaakt, maar goed je zal er vast goed over hebben nagedacht.

En er is niks vreemds aan, als je een method override wordt de oude method niet meer gebruikt.
 
Wilfred Dijksman

Wilfred Dijksman

31/01/2013 11:53:00
Quote Anchor link
@Wouter J
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. Zie ook mijn citaat in mijn vorige reactie en het voorbeeld hieronder:

parent.class.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
class Parent{
    function
__construct(){
        loadChild($var);
    }

    function
loadChild($nameClass){
        include('lib/'.$nameClass.'.class.php');
        return new $nameClass;
    }
}

?>


child.class.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
class Child extends Parent{
    function
__construct(){
        parent::__construct
    }
}

?>


Sanenvattend: als ik parent::__construct gebruik komt het script in een soort van loop waarin hij telkens classes gaat aanmaken. Dit eindigt in een error: Cannot redeclare class Child.

De rede dat de parent een child aanmaakt is omdat afhankelijk van de app die geladen moet worden (via $_GET['app']) er een andere class geladen en geïnitialiseerd moet worden.

Ik hoop dat het verhaal zo een beetje duidelijk is. Vragen en/of mogelijk oplossingen hoor ik graag.

Met vriendelijke groet,
Wilfred Dijksman
Gewijzigd op 31/01/2013 11:55:31 door Wilfred Dijksman
 
Tim S

Tim S

31/01/2013 14:55:43
Quote Anchor link
Moet het dan perse een extension zijn?
 
Wilfred Dijksman

Wilfred Dijksman

31/01/2013 15:10:08
Quote Anchor link
Ja, het is een systeem wat meerdere modules/apps heeft die wel dezelfde basis functies nodig hebben. Die basis functies zitten in de parent class.

Toevoeging op 31/01/2013 15:10:14:

Ik heb ondertussen een oplossing voor mijn probleem:

Ik laad een variabele met daarin het parent class object in de child class zodat via die variabele alles toegankelijk is vanuit de child class. Zie ook het voorbeeld hieronder:

parent.class.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
class Parent{
    private $app;

    function
__construct(){
        loadChild($var);
    }

    function
loadChild($nameClass){
        include('lib/'.$nameClass.'.class.php');
        $this->app = new $nameClass($this);
    }

    function
getSomething($what){
        return($what);
    }
}

?>


child.class.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
class Child{
    private $parent_object;

    function
__construct($parent_object){
        $this->parent_object = $parent_object;

        // execute methode from Parent class
        $this->parent_object->getSomeThing;
    }
}

?>


Opmerking: Nadeel van deze methode is natuurlijk wel dat de visability van properties en methodes omzeilt wordt.

Mochten jullie nog opmerkingen / andere suggesties hebben dan hoor ik dat graag. Nogmaals dankt voor jullie meedenken tot zover.

Met vriendelijke groet,
Wilfred Dijksman

Toevoeging op 31/01/2013 15:12:03:

Ja, het is een systeem wat meerdere modules/apps heeft die wel dezelfde basis functies nodig hebben. Die basis functies zitten in de parent class.

Toevoeging op 31/01/2013 15:10:14:

Ik heb ondertussen een oplossing voor mijn probleem:

Ik laad een variabele met daarin het parent class object in de child class zodat via die variabele alles toegankelijk is vanuit de child class. Zie ook het voorbeeld hieronder:

parent.class.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
class Parent{
    private $app;

    function
__construct(){
        loadChild($var);
    }

    function
loadChild($nameClass){
        include('lib/'.$nameClass.'.class.php');
        $this->app = new $nameClass($this);
    }

    function
getSomething($what){
        return($what);
    }
}

?>


child.class.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
class Child{
    private $parent_object;

    function
__construct($parent_object){
        $this->parent_object = $parent_object;

        // execute methode from Parent class
        $this->parent_object->getSomeThing();
    }
}

?>


Opmerking: Nadeel van deze methode is natuurlijk wel dat de visability van properties en methodes omzeilt wordt.

Mochten jullie nog opmerkingen / andere suggesties hebben dan hoor ik dat graag. Nogmaals dankt voor jullie meedenken tot zover.

Met vriendelijke groet,
Wilfred Dijksman

Toevoeging op 31/01/2013 15:12:16:

Ja, het is een systeem wat meerdere modules/apps heeft die wel dezelfde basis functies nodig hebben. Die basis functies zitten in de parent class.

Toevoeging op 31/01/2013 15:10:14:

Ik heb ondertussen een oplossing voor mijn probleem:

Ik laad een variabele met daarin het parent class object in de child class zodat via die variabele alles toegankelijk is vanuit de child class. Zie ook het voorbeeld hieronder:

parent.class.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
class Parent{
    private $app;

    function
__construct(){
        loadChild($var);
    }

    function
loadChild($nameClass){
        include('lib/'.$nameClass.'.class.php');
        $this->app = new $nameClass($this);
    }

    function
getSomething($what){
        return($what);
    }
}

?>


child.class.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
class Child{
    private $parent_object;

    function
__construct($parent_object){
        $this->parent_object = $parent_object;

        // execute methode from Parent class
        $this->parent_object->getSomeThing();
    }
}

?>


Opmerking: Nadeel van deze methode is natuurlijk wel dat de visability van properties en methodes omzeilt wordt.

Mochten jullie nog opmerkingen / andere suggesties hebben dan hoor ik dat graag. Nogmaals dankt voor jullie meedenken tot zover.

Met vriendelijke groet,
Wilfred Dijksman

Toevoeging op 31/01/2013 15:12:44:

Ja, het is een systeem wat meerdere modules/apps heeft die wel dezelfde basis functies nodig hebben. Die basis functies zitten in de parent class.

Toevoeging op 31/01/2013 15:10:14:

Ik heb ondertussen een oplossing voor mijn probleem:

Ik laad een variabele met daarin het parent class object in de child class zodat via die variabele alles toegankelijk is vanuit de child class. Zie ook het voorbeeld hieronder:

parent.class.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
class Parent{
    private $app;

    function
__construct(){
        loadChild($var);
    }

    function
loadChild($nameClass){
        include('lib/'.$nameClass.'.class.php');
        $this->app = new $nameClass($this);
    }

    function
getSomething($what){
        return($what);
    }
}

?>


child.class.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
class Child{
    private $parent_object;

    function
__construct($parent_object){
        $this->parent_object = $parent_object;

        // execute methode from Parent class
        $this->parent_object->getSomeThing();
    }
}

?>


Opmerking: Nadeel van deze methode is natuurlijk wel dat de visability van properties en methodes omzeilt wordt.

Mochten jullie nog opmerkingen / andere suggesties hebben dan hoor ik dat graag. Nogmaals dankt voor jullie meedenken tot zover.

Met vriendelijke groet,
Wilfred Dijksman
 
Kris Peeters

Kris Peeters

31/01/2013 15:13:34
Quote Anchor link
(Ik heb niet alles grondig gelezen, misschien ontgaat me iets aan deze discussie)
Ik vrees dat ik weeral zal moeten spreken vanuit mijn C achtergrond.

Ik vind dat elke class best een constructor kan hebben.
Ik vind dat elke extend best een eigen constructor kan hebben.

Normaal zou ik daar nooit over zagen/klagen, maar in dit topic is het relevant.

Jij zou in je parent class een methode init() kunnen schrijven; waar je regelt wat echt moet geregeld worden. $this->init() wordt uitgevoerd in de constructor.

Dan kan je in de child die init aanspreken; laat je de constructor van de parent met rust. Geen verwarring, geen conflict, geen probleem meer.
Gewijzigd op 31/01/2013 15:15:35 door Kris Peeters
 
Wilfred Dijksman

Wilfred Dijksman

31/01/2013 15:13:45
Quote Anchor link
Ja, het is een systeem wat meerdere modules/apps heeft die wel dezelfde basis functies nodig hebben. Die basis functies zitten in de parent class.

Toevoeging op 31/01/2013 15:10:14:

Ik heb ondertussen een oplossing voor mijn probleem:

Ik laad een variabele met daarin het parent class object in de child class zodat via die variabele alles toegankelijk is vanuit de child class. Zie ook het voorbeeld hieronder:

parent.class.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
class Parent{
    private $app;

    function
__construct(){
        loadChild($var);
    }

    function
loadChild($nameClass){
        include('lib/'.$nameClass.'.class.php');
        $this->app = new $nameClass($this);
    }

    function
getSomething($what){
        return($what);
    }
}

?>


child.class.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
class Child{
    private $parent_object;

    function
__construct($parent_object){
        $this->parent_object = $parent_object;

        // execute methode from Parent class
        $this->parent_object->getSomeThing();
    }
}

?>


Opmerking: Nadeel van deze methode is natuurlijk wel dat de visability van properties en methodes omzeilt wordt.

Mochten jullie nog opmerkingen / andere suggesties hebben dan hoor ik dat graag. Nogmaals dankt voor jullie meedenken tot zover.

Met vriendelijke groet,
Wilfred Dijksman

Toevoeging op 31/01/2013 15:15:22:

Ja, het is een systeem wat meerdere modules/apps heeft die wel dezelfde basis functies nodig hebben. Die basis functies zitten in de parent class.

Toevoeging op 31/01/2013 15:10:14:

Ik heb ondertussen een oplossing voor mijn probleem:

Ik laad een variabele met daarin het parent class object in de child class zodat via die variabele alles toegankelijk is vanuit de child class. Zie ook het voorbeeld hieronder:

parent.class.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
class Parent{
    private $app;

    function
__construct(){
        loadChild($var);
    }

    function
loadChild($nameClass){
        include('lib/'.$nameClass.'.class.php');
        $this->app = new $nameClass($this);
    }

    function
getSomething($what){
        return($what);
    }
}

?>


child.class.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
class Child{
    private $parent_object;

    function
__construct($parent_object){
        $this->parent_object = $parent_object;

        // execute methode from Parent class
        $this->parent_object->getSomeThing();
    }
}

?>


Opmerking: Nadeel van deze methode is natuurlijk wel dat de visability van properties en methodes omzeilt wordt.

Mochten jullie nog opmerkingen / andere suggesties hebben dan hoor ik dat graag. Nogmaals dankt voor jullie meedenken tot zover.

Met vriendelijke groet,
Wilfred Dijksman

Toevoeging op 31/01/2013 15:18:28:

Mijn excuses. Ik probeer een bericht te bewerken maar dat gaat even niet helemaal lekker. Mss dat een mod het voor elkaar krijg mijn berichten in te perken tot het laatst geposte bericht?

Toevoeging op 31/01/2013 15:21:26:

@Kirs Peeters, thnsx voor je snelle reactie. Een soortgelijke mogelijkheid zoals jij deze aandraagt is eerder al aangedragen. Probleem is dan dat de curl_session in de parent class een andere is dan in de child class. Dit moeten dezelfde zijn omdat de child class anders geen data kan ophalen (in de parent class wordt ingelogd, die sessie heeft child class nodig).

Mocht je nog vragen/opmerkingen/ideeën hebben, dan hoor ik het graag.

Met vriendelijke groet,
Wilfred Dijksman
 
Kris Peeters

Kris Peeters

31/01/2013 15:25:24
Quote Anchor link
Dan vrees ik dat ik akkoord moet gaan dat met de eerste reactie van Erwin.
Het lijkt me niet wenselijk dat een extend members van zijn parent aanmaakt.

m.a.w. misschien is het beter dat je iets anders gebruikt dan een extend.

Tim Slootweg op 31/01/2013 14:55:43:
Moet het dan perse een extension zijn?

Wilfred Dijksman op 31/01/2013 15:10:08:
Ja, het is een systeem wat meerdere modules/apps heeft die wel dezelfde basis functies nodig hebben. Die basis functies zitten in de parent class.


Dit lijkt me geen goed OOP argument.
Dit is niet de reden waarom men een extend maakt.

Niets houdt je tegen om methodes uit een andere class aan te spreken.

- Je kan die functies statisch maken.
- Je kan een member van de hoofd-class meegeven aan de "child"; dan heb je ook diens methodes ook ter beschikking.
Gewijzigd op 31/01/2013 16:04:40 door Kris Peeters
 
Tim S

Tim S

31/01/2013 16:09:07
Quote Anchor link
Je kan natuurlijk wel gewoon een instantie aanmaken van een nader klasse met setters en getters is alles dan ook te verplaatsen.
 
Erwin H

Erwin H

31/01/2013 20:17:47
Quote Anchor link
Wilfred Dijksman op 31/01/2013 00:33:35:
Over je mogelijke oplossing:
Probleem wordt dan dat er meerdere cUrl sessies komen omdat $this->ch dan twee keer wordt ingesteld op curl_init(); Voor de werking van het systeem is één dezelfde sessie in cUrl vereist (cUrl logt in de parent class in op een systeem en haalt in de child class data op uit datzelfde systeem. Dit moet in dezelfde cUrl sessie gebeuren omdat anders de login die cUrl heeft gedaan in de parent class verlopen is.).

Maar dat is dus juist niet waar in de code die ik je gaf. Alleen de allereerste keer dat getCh() wordt aangeroepen (hetzij door de parent, hetzij door de child) wordt $this->ch geinitialiseerd met curl_init(), daarna wordt elke keer de al geinitialiseerde sessie gebruikt. Dat was nu juist de grap van het voorbeeld dat ik je gaf.
 
Wilfred Dijksman

Wilfred Dijksman

31/01/2013 22:00:47
Quote Anchor link
@Erwin H: Ik begrijp je idee. Ik heb het geprobeerd. Maar in de praktijk wordt $this->ch twee keer geïnitialiseerd. Een class die extend neemt de properties en methoden mee maar niet de waarde van die properties die eerder zijn ingesteld (zo lijkt het in ieder geval).
 
Ward van der Put
Moderator

Ward van der Put

01/02/2013 08:50:42
Quote Anchor link
Wilfred, heb je één cURL-verbinding nodig die wordt gedeeld door meerdere apps? En moet die verbinding een bepaalde tijd geopend blijven of gebruik je per verzoek een openen/sluiten-mechanisme? Is het resultaat van het cURL-verzoek misschien lokaal te cachen gedurende enkele seconden/minuten/uren of moet elk verzoek nieuwe externe data ophalen?

Als je maar één externe cURL-verbinding gebruikt die moet worden gedeeld door alle apps en sessies, is dat in wezen een singleton omdat je maar één instantie van het object gebruikt. Ondersteunt de externe server die de cURL-respons afhandelt bijvoorbeeld maximaal twee gelijktijdige verbindingen, dan kun je daarop een variant maken.
 
Erwin H

Erwin H

01/02/2013 09:31:35
Quote Anchor link
Wilfred Dijksman op 31/01/2013 22:00:47:
Een class die extend neemt de properties en methoden mee maar niet de waarde van die properties die eerder zijn ingesteld (zo lijkt het in ieder geval).

Dat is klinklare onzin. Een class die een andere class extend neemt de properties over inclusief alle waardes. Wat heb je anders aan private en protected properties?
Voorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
28
29
30
31
32
<?php

class Parent2{

  private $test;

  protected function getTest(){
    if ( $this->test == null ){
      echo 'init<br>';
      $this->test = 'een waarde<br>';
    }


    return $this->test;
  }

  
  public function __construct(){
    echo $this->getTest();
  }
}


class Child2 extends Parent2{
  
  public function geefTest(){
    echo $this->getTest();
  }

}


$obj = new Child2();
$obj->geefTest();

?>

Dit geeft als uitkomst:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
init
een waarde
een waarde

Niet twee keer init dus, het private property wordt maar 1 keer geinitialiseerd.

Maar....
Wilfred Dijksman op 31/01/2013 22:00:47:
@Erwin H: Ik begrijp je idee. Ik heb het geprobeerd. Maar in de praktijk wordt $this->ch twee keer geïnitialiseerd.

Dit is niet omdat je een class extend, maar omdat je twee instanties aanmaakt. In de constructor creeer je nog een instantie (via new $_GET['app'];) Daar ga je mis, want inderdaad, dan krijg je twee verschillende instanties met ieder hun eigen properties en eigen waardes. Daarmee kom je dus weer terug bij het feit dat je opzet gewoon, uhm, vreemd is.

Wat je moet doen, als je echt maar 1 instantie van curl wilt hebben, is dat deel uit je class halen en in een aparte class plaatsen. Je doet dit nu wel op een nogal vreemde manier, door de parent apart aan te maken (waardoor je dus een child krijgt die parent extend EN een parent instantie in een property heeft), maar zo krijg je hele vreemde connecties.
 
Wilfred Dijksman

Wilfred Dijksman

02/02/2013 22:55:56
Quote Anchor link
@Tim Slootweg: Mijn excuses, ik had je reactie over het hoofd gezien. Probleem is dat de parrent class twee keer wordt geïnitialiseerd. Dit probleem blijf je houden, ook met setters en getters lijkt me toch (dubbele curl session is dan idd wel opgelost, maar code blijft dan nog steeds weired)?

@Ward van der Put: De session die in curl start moet in de child dezelfde session zijn. De parent class logt in op een website (submit user/pass) en de child class haalt vervolgens data op van een andere pagina op dezelfde website (die alleen zichtbaar is als je bent ingelogd (dus session die geopend is in de parent class is nodig)). Wanneer de request van de remote is afgehandeld is de sessie niet meer nodig en hoeft deze dus ook niet aan de remote kant gecached te worden.

@Erwin: Haha, het kwam mijn idd ook over als klare onzin. En zoals ik eerder al heb gezegd: mijn code(opbouw) zal hoogst waarschijnlijk een groot aantal verbeter punten hebben. Ik ben mijzelf dan ook bewust van het feit dat mijn huidige oplossing een slechte work-around is. Overigens heb ik je verhaal vandaag meerdere keren moeten doorgelezen om het goed te begrijpen.

Volgens mij begrijp je mij alleen verkeerd (of ik jou :s): Via new $_GET['app']; wordt de child class geïnitialiseerd (en niet de parrent class (voor een tweede keer)). Van de parent class is dus maar 1 instantie. In de parent class komt daar een instantie van de child class bij. Van beide classes is dus één instantie (zou ik zeggen).

Maybe I'm wrong… ;) Iig nogmaals dank voor jullie hulp en tijd voor zover!

Wilfred Dijksman

Toevoeging op 02/02/2013 22:57:16:

Toevoeging op 31/01/2013 15:12:44:

Ja, het is een systeem wat meerdere modules/apps heeft die wel dezelfde basis functies nodig hebben. Die basis functies zitten in de parent class.

Toevoeging op 31/01/2013 15:10:14:

Ik heb ondertussen een oplossing voor mijn probleem:

Ik laad een variabele met daarin het parent class object in de child class zodat via die variabele alles toegankelijk is vanuit de child class. Zie ook het voorbeeld hieronder:

parent.class.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
class Parent{
    private $app;

    function
__construct(){
        loadChild($var);
    }

    function
loadChild($nameClass){
        include('lib/'.$nameClass.'.class.php');
        $this->app = new $nameClass($this);
    }

    function
getSomething($what){
        return($what);
    }
}

?>


child.class.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
class Child{
    private $parent_object;

    function
__construct($parent_object){
        $this->parent_object = $parent_object;

        // execute methode from Parent class
        $this->parent_object->getSomeThing();
    }
}

?>


Opmerking: Nadeel van deze methode is natuurlijk wel dat de visability van properties en methodes omzeilt wordt.

Mochten jullie nog opmerkingen / andere suggesties hebben dan hoor ik dat graag. Nogmaals dankt voor jullie meedenken tot zover.

Met vriendelijke groet,
Wilfred Dijksman
 
Tim S

Tim S

02/02/2013 23:27:56
Quote Anchor link
...
Gewijzigd op 02/02/2013 23:37:25 door Tim S
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.