cUrl gebruiken vanuit child class

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

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 »

Back end developer Python, PHP

Functie Jij als full stack ontwikkelaar zult komen te werken samen met 1 PHP ontwikkelaar een PO en een flexibele schil aan ontwikkelaars . Samen ga je ervoor zorgen dat de huidige producten doorontwikkeld worden. De marketplace is geschreven in PHP Laravel en in de front end React. De roostersoftware is ontwikkeld in Python in combinatie met React in de front end. Jij zult voornamelijk (lees 75%) werken aan de roostersoftware. Momenteel ligt de uitdaging in het feit dat de roostersoftware breder schaalbaar moet worden zodat het voor meerdere flexwerkers ingezet kan worden. Verder willen ze financiële koppelingen gaan maken

Bekijk vacature »

Ervaren PHP developer gezocht!

Functie Het team bestaat inmiddels uit zo’n 25 collega’s met specialisten op het gebied van development, data(analyse), marketing, infrastructuur en finance. Ze hebben een supermodern pand en bieden hiernaast veel vrijheid en verantwoordelijkheid. Ze doen er alles aan om jou op te gemak te stellen. Zo kun je je eigen werkplek inrichten naar persoonlijke wensen, maar gaan ze bijvoorbeeld ook jaarlijks met elkaar wintersporten en zijn er andere leuke uitjes. Als onderdeel van één van de scrumteams ga je aan de slag, samen ben je medeverantwoordelijk voor het doorontwikkelen van hun business applicatie waar het traffic team dagelijks mee werkt.

Bekijk vacature »

.NET Developer

Functie De perfecte combinatie tussen techniek en vastgoed. Werk samen met de senior software developer om allerlei software van fluX te verbeteren. Gelukkig voel jij je helemaal thuis in de codewereld van .NET. Dus of je nu bezig bent met het verhogen van de conformiteitscore of het automatiseren van allerlei taxatiemodellen, jij weet precies hoe je de doelstellingen realiseert. En dat terwijl je ook samenwerkt met een extern ontwikkelteam. Waar dit team bepaalde softwaresystemen ontwikkelen, richt jij je vooral op onze Nederlands georiënteerde producten en alle wetgeving die daarbij komt kijken. Voor minimaal 32 uur per week verrijk jij onze

Bekijk vacature »

Full stack .NET developer Microsoft 365

Wat ga je doen als Full stack .NET developer Microsoft 365? Je stelt je op als sparringpartner voor het team en PO over toekomstige functionaliteiten, architectuur en mogelijke nieuwe producten. Je bent mede-verantwoordelijk voor het vertalen en omzetten van een user story in een passend technisch design. Je implementeert functionaliteiten op basis van een technisch design en user story. Je bent mede-verantwoordelijk voor het beheer van Azure DevOps, waaronder het beheer van GIT, Build Pipelines, Release Pipelines en geautomatiseerde testen. Hier herken jij jezelf in Hbo werk- en denkniveau of hoger aangevuld met relevante certificeringen en/of cursussen; Minimaal 3 jaar

Bekijk vacature »

Front-end Developer

Front-end Developers opgelet! Bij Luminis zijn ze opzoek naar jou. Lees de vacature en solliciteer direct. Luminis is een software- en technologiebedrijf met meerdere vestigingen. Vanuit deze vestigingen werken 200 professionals aan technisch hoogwaardige oplossingen voor klanten zoals KLM, Nike en Bol.com. Ook ontwikkelt Luminis eigen oplossingen op het gebied van cloud, Internet of Things, data intelligence, e-sports en e-learning. Luminis onderscheidt zich door aantoonbaar voorop te lopen in technologie en innovatie. Luminis heeft drie kernpunten die verankerd zitten in alles wat we doen: het omarmen van nieuwe technologie, meesterschap en kennis delen. Functiebeschrijving First things first! Het is belangrijk

Bekijk vacature »

Software ontwikkelaar

Ben jij graag bezig met verschillende projecten? Vind jij beleving van klanten én medewerkers ook belangrijk? Wij zijn vanwege de doorontwikkeling van het applicatielandschap van onze opdrachtgever op zoek naar een fulltime software ontwikkelaar. Omschrijving Jij en jouw collega’s zijn verantwoordelijk voor de continuïteit en waarborging van het applicatielandschap. Om de processen vloeiend te laten verlopen is software ontwikkeling daarom van essentieel belang. Onze opdrachtgever doet dit voornamelijk zelf, met door hun eigen ontwikkelde applicaties. Dit betekent dat jij: functionele eisen vertaalt naar gebruiksvriendelijke software; tijdens SCRUM sessies advies geeft over het te bouwen ontwerp; nieuwe software ontwikkelt en het

Bekijk vacature »

PHP Programmeur

Functieomschrijving Vanuit het hoofdkantoor in omgeving Breda, ontwikkel je als PHP programmeur niet alleen webapplicaties, maar ben je verder ook gefocust op het constant inspelen op nieuwe innovaties m.b.t software ontwikkeling. Naast het ontwikkelen van webapplicaties, bouwt deze toffe werkgever ook webshops en websites voor hun opdrachtgevers. Wat ga je doen? Het testen van ontwikkelde applicaties om te zorgen dat ze goed functioneren en voldoen aan de eisen van de klanten; Het ontwerpen en implementeren van webapplicaties met het Symfony framework; Het schrijven van een schone en efficiënte code volgens het Symfony framework; Onderhouden en updaten van bestaande applicaties die

Bekijk vacature »

Java Developer

Dit ga je doen Het ontwikkelen van nieuwe software; Het ombouwen van de bestaande software; Zowel back- als front-end software ontwikkelen; Het testen; Het implementeren van de volledig geteste software; Het verzorgen van nazorg en het oplossen van bugs; Het opstellen en bijhouden van procesdocumentatie; Je draagt bij aan het agile/scrum processen van het team. Hier ga je werken Ongetwijfeld heb je een of meerdere producten van deze organisatie in huis. Het proces erachter, daar ben je ongetwijfeld minder bekend mee. Deze opdracht geeft je de kans meer over dit proces te weten te komen en een mooie bijdrage te

Bekijk vacature »

Junior .NET developer

Functie Als junior .NET ontwikkelaar start jij in een ontwikkelteam met 7 .NET developers. In ons team werken er drie senior .NET developer, twee medior .NET developers en twee junior .NET developers. Er is dan ook genoeg senioriteit in ons team om jou te kunnen bieden wat jij nodig hebt! Wij werken in scrum en hebben drie wekelijkste sprints. Daarnaast doen wij minimaal vier keer per jaar een release. Ons platform is ontzettend complex en groot. Het is dan ook in het begin belangrijk dat jij de processen gaat begrijpen. Jij krijgt dan ook een cursus om beter te begrijpen

Bekijk vacature »

Medior front-end developer gezocht (€3.300 -

Functie Wat ga je doen? Jij als front-end developer gaat werken binnen de teams van/voor onze klant. Je werkt in een team met starters en ervaren ontwikkelaars met allemaal 1 overeenkomst; passie voor het vak. Maak je een fout? Geen probleem, leer ervan en ga dan weer door. Door de variëteit aan werk kun je in verschillende omgevingen een kijkje nemen en jezelf dus snel ontwikkelen. Wat hebben we jou te bieden? • Uitdagende projecten bij mooie klanten (bij jou in de buurt, of binnenkort intern vanuit ons kantoor!) • Een jonge organisatie met talentvolle collega’s • Veel ruimte voor

Bekijk vacature »

Medior Java developer (fullstack)

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

Software developer (PHP) - Utrecht centrum

Functie Ieder onderdeel van de software draait op aparte servers en het bestaat dus echt uit verschillende componenten. Het team bestaat uit 4 developers, een klein team dus met korte lijnen. Alles in intern ontwikkeld en je werkt aan alle facetten. Van uitbreiding van de core tot maatwerk voor de klant. Ook liggen er verschillende uitdagingen op servervlak en databases. Je zult de eerste periode veel samenwerken met de lead developer om vervolgens echt je gang te gaan binnen de software. In het team streven ze naast de hoogst haalbare kwaliteit. Hiervoor werken ze nauw met elkaar samen en levert

Bekijk vacature »

(Junior) Back-end Ontwikkelaar

Functie omschrijving We are looking for a dutch native speaker Altijd al willen werken bij een organisatie, die maatwerk applicaties bouwt, die echt impact hebben in de maatschappij? Dit is je kans. Voor een kleine organisatie in de regio van Eindhoven ben ik op zoek naar een C# Ontwikkelaar. Jij gaat aan de slag met de ontwikkeling van maatwerk software en applicaties. Deze organisatie werkt voor grote organisaties in Nederland, maar ook voor het MKB. De projecten waar je aan gaat werken zijn erg divers, waardoor je werk uitdagend blijft en je erg veel kan leren. Verder ga je aan

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 »

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 11:37:56
 
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.