__toString() method werkt niet

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Software Developer .NET

Functie omschrijving .NET developer gezocht! Wij zoek op zoek naar een .NET Developer die zich niet uit het veld laat slaan voor een software bedrijf in de regio Veenendaal. Je gaat in deze functie aan de slag met het door ontwikkelen van bestaande producten en het ontwikkelen van nieuwe producten. Dit bedrijf ontwikkeld SaaS applicaties die zowel intern als extern gebruikt worden. Verder bestaat je functie uit: Het ontwikkelen en bouwen van webapplicatie, mobiele applicaties en websites vallen onder jouw verantwoordelijkheden; Werken met onder andere .NET, C#, HTML/CSS, Javascript en MSSQL/Oracle Databases; Hierin werk je samen met andere developers en

Bekijk vacature »

PHP Developer

Functieomschrijving Wij zijn op zoek naar een PHP Developer met Laravel ervaring! Voor een groeiende werkgever in regio Breda zijn wij op zoek naar een medior PHP developer met Laravel ervaring. Je gaat aan de slag met het ontwikkelen van maatwerk software voor klanten in een specifieke markt. Als PHP developer ben je samen met een gemotiveerd team van 6 collega’s verantwoordelijk voor de ontwikkeling, beheer en het innoveren van informatiesystemen voor klanten in een specifieke branche. Als software developer ondersteun je complexe uitdagingen van klanten. Je brengt hun wensen in kaart en vertaalt deze door naar maatwerk software. Om

Bekijk vacature »

Front-end developer Supply Chain Angular, ReactJS,

Functie Het development team bestaat momenteel uit 9 fullstack (Python en .NET) developers. Binnen het team ga jij je toespitsen op het creëren van de optimale toegankelijkheid en user experience. Om dit voor elkaar te krijgen zul je ontwerpen, programmeren, testen en implementeren. Het hele proces dus! Maar ook bijvoorbeeld meedenken over strategie en design. Hierin krijg je veel vrijheid om de functie naar eigen inzicht in te vullen en te pionieren. Alle data die wordt gebruikt is zichtbaar in een webapplicatie, geschreven in Angular en React. Momenteel zijn ze bezig om de dashboards anders vorm te geven en de

Bekijk vacature »

Oracle APEX developer

Wat je gaat doen: Als Oracle APEX ontwikkelaar bij DPA werk je samen met collega’s aan de meest interessante opdrachten. Je zult je ervaring met SQL, PL/SQL, JavaScript, HTML en CSS inzetten om wensen van opdrachtgevers te vertalen naar technische oplossingen. Je werk is heel afwisselend, omdat DPA zich niet beperkt tot een specifieke branche. Zo ben je de ene keer bezig binnen de zorgsector, de andere keer is dit bij de overheid. Wat we vragen: Klinkt goed? Voor deze functie breng je het volgende mee: Je hebt een hbo- of universitaire opleiding afgerond Je hebt 2 tot 5 jaar

Bekijk vacature »

C#.NET developer

Functieomschrijving Wij zijn op zoek naar een gepassioneerde Full Stack C#.NET Software Developer. Als Software Developer ben je verantwoordelijk voor het ontwikkelen van webapplicaties, apps en dashboards voor de eigen IOT-oplossingen. Je werkt samen met andere ontwikkelaars en engineers om de sensoren in machines uit te lezen en deze data om te zetten in management informatie voor jullie klanten. Taken en verantwoordelijkheden: Testen en valideren van de ontwikkelde software. Ontwikkelen en onderhouden van webapplicaties, apps en dashboards voor de eigen IOT-oplossingen. Je gaat aan de slag met diverse technologieën en frameworks. Denk hierbij aan C#, JS frameworks, HTML, CSS, TypeScript,

Bekijk vacature »

Laravel Developer

Functie omschrijving Voor een gave organisatie in de buurt van Den Bosch zoek ik een PHP developer. Het is van belang dat je kennis/ervaring hebt met het framework Laravel. Jij gaat in deze functie software applicaties ontwikkelen. Deze software projecten zijn heel divers, en deze organisatie maakt software, van A tot Z. Klanten kunnen in elke sector werkzaam zijn, van profit tot non-profit. Andere taken zijn onder andere: documentatie schrijven over applicaties/uitleg geven over software en applicaties/ klantcontact over bestaande applicaties/applicaties optimaliseren. Bedrijfsprofiel Deze organisatie zit in de regio van Den Bosch en is een klein bedrijf. Er werken circa

Bekijk vacature »

Consultant Low Code Developer

Functie omschrijving Heb jij verstand van datamodellering, NO CODE Platformen en kun jij het aan om projecten te leiden? Ben jij toe aan een nieuwe uitdaging en ben jij HBO afgestudeerd in de richting van IT? Voor een mooie opdrachtgever in omgeving Delft zijn wij op zoek naar een No Code developer die zich bezig gaat houden met het optimaliseren van bedrijfsprocessen bij klanten. Onderdelen functie Je gaat geen code kloppen maar bedenken hoe applicaties eruit moet komen te zien. Je gaat werken met een non code platform, je kunt denken aan Mendix of Betty Blocks. Je bent verantwoordelijk voor

Bekijk vacature »

Fullstack developer

Functie omschrijving Ben jij toe aan een nieuwe uitdaging en zou jij graag bij een platte maar informele organisatie werken? Voor een mooi softwarebedrijf in omgeving Gouda zijn wij op zoek naar versterking op de afdeling Software Development! Als Fullstack react.js developer wordt je bij dit bedrijf onderdeel van de volledige ontwikkeling van requirement tot oplevering! Onderdelen van jouw functie: Jouw focus ligt op de front end en alles wat daarbij komt kijken. Je gaat ontwerpen, ontwikkelen, testen en valideren. Je zult voornamelijk werken met React.js en Typescript. Maar ook Javascript, HTML en CSS komen aanbod. Daarnaast zal je ook

Bekijk vacature »

3D BIM Add-on Developer

Als 3D BIM add- on ontwikkelaar bij KUBUS ontwikkel je add-ons (BCF Managers genaamd) voor de toonaangevende building information modeling (BIM) programma's Revit, Navisworks, Archicad, AutoCAD en Tekla Structures. BCF Managers maken gegevensoverdracht mogelijk tussen BIM-software en BIMcollab. Je werkt zowel aan de front- als aan de back-end. Als softwarebedrijf bevindt KUBUS zich in een unieke positie. We bouwen aan onze eigen producten die wereldwijd door tienduizenden gebruikers worden gebruikt. Ons bedrijf heeft precies de juiste grootte: groot genoeg om echt impact te maken in de markt, maar klein genoeg om als individuele ontwikkelaar invloed uit te kunnen oefenen en

Bekijk vacature »

Traineeship Front-end developer (WO, 0 tot 3 jaar

Functie Zoals beschreven ga je vanaf start aan de slag bij een passende opdrachtgever, hierbij kijken ze echt naar jouw wensen, kennis/ervaring maar ook de reisafstand. Momenteel hebben ze meerdere klanten waarbij ze groepen hebben opgezet wat maakt dat er diverse uitdagende kansen liggen. Naast het werken bij de opdrachtgever, en het volgen van de masterclasses, zul je regelmatig met de andere trainees in contact zijn. Niet alleen op professioneel vlak maar juist ook bij de borrels en kwartaaluitjes! Kortom; een jaar lang hard aan jezelf werken in combinatie met gezelligheid en plezier. Spreek dit jou aan? Dan komen we

Bekijk vacature »

Web Application Developer

Dit ga je doen Samen met het team werk je aan de visualisatie functionaliteiten en hoe dit gebruikt kan worden in een operationele setting; Het ontwerpen, ontwikkelen, onderhouden en leveren van support betreft het Warehouse Management Systeem en de bijbehorende web visualisaties; Je gebruikt hierbijde tools WebGL en ASP.net; Het meewerken in implementatieprojecten; Het leveren van Go-Live Support; Sparren met jouw Amerikaanse collega's. Hier ga je werken Voor een internationale organisatie in de transport zijn wij momenteel op zoek naar een Web Application Developer. Ze zijn wereldwijd de grootste speler en lopen voorop met het automatiseren van alle processen van

Bekijk vacature »

Front-end Angular developer

Functie In jouw rol als Front-End developer werk je samen met de backend developers om middels tweewekelijkse sprints het platform naar een hoger niveau te tillen. Hiernaast heb je affiniteit met data en werk je graag samen met het team om de gegevensintegriteit en -beveiliging te waarborgen, om ervoor te zorgen dat de gebruiker wereldwijd de beste SaaS-services heeft. Deze organisatie heeft meer dan 100 mensen in dienst, waarvan er 45 in Nederland werken. Het ontwikkelteam bestaat uit 10 mensen en is verdeeld in 2 scrumteams. Het eerste team bestaat uit Java en Scala ontwikkelaars. Het tweede team, waar jij

Bekijk vacature »

C# developer

Functie Als C# ontwikkelaar ben jij de spin in het web bij deze organisatie. Jij begeleidt en traint de field engineers die bij de klanten machines leveren en installeren. Daarnaast ondersteun jij de field engineers als zij bij de klant vastlopen bij het installeren van de machine m.b.t. software matige vragen. Jouw doel is dan ook om de technische kennis van de field engineers door middel van training zoveel mogelijk uit te breiden. Dit om ervoor te zorgen dat zij zelfstandiger software matige problemen kunnen oplossen. Ook ben jij verantwoordelijk voor het bedenken van software oplossingen voor klanten en dit

Bekijk vacature »

PHP developer

Functie Voor een opdrachtgever in omgeving Leiden zijn wij op zoek naar een PHP developer die affiniteit heeft met C++. Ben jij reeds afgestudeerd of heb je al een paar jaar ervaring? Lees snel verder en kijk of dit iets voor jou is! Hoe kan jouw dag er straks uitzien? Je gaat software en webapplicaties ontwikkelen met behulp van de talen C / C++ / PHP. Je gaat technische klussen uitvoeren op locatie bij klanten. Je onderhoudt contact met de projectleider om er zeker van te zijn dat een projecten goed verlopen. Je gaat klanten ondersteunen op het gebied van

Bekijk vacature »

Laravel developer

Zie jij mogelijkheden om onze tooling technisch te verbeteren en uit te bouwen? Over Jobmatix Jobmatix is een innovatieve en internationale speler op het gebied van jobmarketing. Onze jobmarketing automation tool helpt organisaties bij het aantrekken van nieuw talent door vacatures digitaal, geautomatiseerd en op een efficiënte manier te adverteren en onder de aandacht te brengen bij de doelgroep op 25+ jobboards. Volledig performance-based, waarbij organisaties betalen op basis van cost per click of cost per applicant. Maandelijks wordt onze jobmarketing automation tool al gebruikt door vele directe werkgevers, intermediairs en mediabureaus, waaronder Picnic, Rijkswaterstaat, AdverOnline, Schiphol, DPA, Teleperformance en

Bekijk vacature »
Joakim Broden

Joakim Broden

17/12/2012 11:04:06
Quote Anchor link
Ik heb de volgende class:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
    Class Json {
        protected $data = array();

        public function __construct() {
            $this->data = array('lorem', 'ipsum', 'dolor', 'sit');
        }


        public function __toString() {
            return $this->data;
        }
    }

?>


Alleen werkt de toString method niet. Als ik het volgende doe:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
    $class
= new Json();

    print_r($class);
?>


Nu verwacht ik eigenlijk dat te print_r een array toont $data alleen nu toont hij de Json object. Kan iemand mij vertellen wat ik verkeerd doe? Ik heb PHP versie 5.3.8
 
PHP hulp

PHP hulp

16/05/2024 02:42:58
 
Henk Verhoeven

Henk Verhoeven

17/12/2012 11:13:52
Quote Anchor link
print_r is volgens mij bedoeld voor debugging, die laat de member variables zien, niet de string-representatie.

probeer:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
print $class;


Je code is trouwens verwarrend. Je stop een object, in dit geval een instantie van de class Json in een variabele $class. Dit zou netter zijn:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4

$object = new Json();

print $object;
 
Kris Peeters

Kris Peeters

17/12/2012 11:21:24
Quote Anchor link
Wel ja, dat is het he.

print_r verwacht een array of object.
__tostring wordt pas geactiveerd wanneer je probeert een echo of print van een object uit te voeren; dus met print_r voelt de class zich niet aangesproken om __tostring te triggeren.

En sowieso, __tostring() wordt geacht een string terug te geven; het kan dus nooit de bedoeling zijn dat je een array return't.

Dit kan wel:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
Class Json {
  protected $data = array();
  public function __construct() {
    $this->data = array('lorem', 'ipsum', 'dolor', 'sit');
  }

  public function __toString() {
    return print_r($this->data, true);
  }
}

$object = new Json();
print $object;
?>
 
Joakim Broden

Joakim Broden

17/12/2012 11:35:26
Quote Anchor link
Kris inderdaad bedankt, bij echo voert hij wel de toString uit. Bedankt voor de uitleg.

Mijn volgende vraag is, ik het dus een Json Class. Die haalt een Json bestand op en leest deze uit. Momenteel gebruik ik de class als volgt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
    $json
= new Json(URL_JSON_BESTAND);
    $config = new Config($json->getData);
?>


Zoals je kunt zien haal ik via $json->getData de geparsede json op, ik heb liever dat dit ik 1 keer gebeurd en dus niet de $json->getData hoef uit te voeren, dus ik wil het graag zo:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    $config
= new Config(new Json(URL_JSON_BESTAND));
?>


Dus dat Json class gelijk de geparsede json terug geeft ipv oject.
 
Moose -

Moose -

17/12/2012 11:39:37
Quote Anchor link
Dan geef je toch gewoon aan je Config class een JSON object mee via de constructor? En dan handel je daar de rest af

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
function __construct(JSON $json) {
    $this->data = $json->getData();
}
 
Joakim Broden

Joakim Broden

17/12/2012 11:46:21
Quote Anchor link
Klopt dat kan ook, maar die config kan ook een XML, INI bestand hebben. Dus heb liever dat de __construct van de config een array mee krijgt.

En heb liever dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
    $config
= new Config(new Json(URL_JSON_BESTAND));

    $config = new Config(new Xml(URL_XML_BESTAND));
?>


ipv:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
    $json
= new Json(URL_JSON_BESTAND);
    $config = new Config($json->getData);

    $xml = new Xml(URL_XML_BESTAND);
    $config = new Config($xml->getData);
?>


Is dit mogelijk?
 
Moose -

Moose -

17/12/2012 11:58:51
Quote Anchor link
Wat dacht je hiervan:

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
interface DataInterface {
    function getData();
}

class JSON implements DataInterface {
    function getData() {
        // return je data    
    }
}

class Config {
    function __construct(DataInterface $data) {
        $this->data = $data->getData();    
    }
}


Nu kun je dus makkelijk een XML bestand inladen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
class XML implements DataInterface {
    function getData() {
        // return je data    
    }
}

$xml = new XML(URL_XML_BESTAND);
$config = new Config($xml);
Gewijzigd op 17/12/2012 14:11:59 door Moose -
 
Joakim Broden

Joakim Broden

17/12/2012 12:01:25
Quote Anchor link
Zo heb ik het ook gedaan in mijn config class:

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
<?php
    switch(strtoupper($driver)) {
        case
'INI':
            $reader = new Reader\Ini($parameters);
            $this->catalogue->setData($reader->getData());
            break;
        case
'JSON':
            $reader = new Reader\Json($parameters);
            $this->catalogue->setData($reader->getData());
            break;
        case
'XML':
            $reader = new Reader\Xml($parameters);
            $this->catalogue->setData($reader->getData());
            break;
        default:

            throw new Exception\RuntimeException(sprintf('Failed to initialize %s, there is no driver avaible for "%s".', __CLASS__, $driver));
            break;
    }

?>
 
Moose -

Moose -

17/12/2012 12:05:55
Quote Anchor link
Cool, maar zie jij wat ik zie? Duplicate code. Op elke reader roep je een getData functie aan. Dit is perfect op te lossen via een interface.
Gewijzigd op 17/12/2012 12:07:29 door Moose -
 
Joakim Broden

Joakim Broden

17/12/2012 12:18:05
Quote Anchor link
Eigenlijk zou ik de regel $this->catalogue->setData($reader->getData()); uit de switch moeten halen en die er onder moeten zetten. :-)
 
Moose -

Moose -

17/12/2012 13:36:59
Quote Anchor link
precies :) Dan is het makkelijk uit te breiden zonder dat je wat hoeft toe te voegen aan je Config class
 
Wouter J

Wouter J

17/12/2012 13:49:37
Quote Anchor link
Het enige probleem wat ik nu nog met dit scriptje heb is dat hij totaal afhankelijk is van parser klassen. Wat als ik nou een Yaml parser erbij wil doen? Dan moet ik de code in de config klasse gaan aanpassen. Dat lijkt me toch niet correct?

Wat ik zou doen is de methode die ze bij Zend gebruiken. Je hebt Parser klassen zoveel als je wilt (ze noemen dit Reader) en ze hebben een Config klasse. Deze Config klasse krijgt als constructor gewoon een array met de configuratie mee, hoe je die hebt gekregen (met parsers of gewoon een normale PHP array) maakt die config klasse niet uit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
use Zend\Config\Config;

// ini configuratie
$config = new Config(new \Zend\Config\Reader\Ini(INI_CONFIG_FILE));
// yaml configuratie
$config = new Config(new \Zend\Config\Reader\Yaml(YAML_CONFIG_FILE));
// ... ect.

// of gewoon een php configuratie

$config = new Config(array('framework' => array('foo' => 'bar', 'lorem' => 'ipsum')));
?>
 
Moose -

Moose -

17/12/2012 13:56:58
Quote Anchor link
Als jij in je YAMLParser een getData functie maakt en daarbinnen je array retourneert, hoef je toch niks aan je Config class aan te passen?
 
Wouter J

Wouter J

17/12/2012 14:02:31
Quote Anchor link
In het geval van Hertog zou je dan toch een 'Failed to initialize Config, there is no driver avaible for "YAML".' foutmelding krijgen?
 
Moose -

Moose -

17/12/2012 14:08:25
Quote Anchor link
Wacht, ik heb het alleen maar over de data verkrijgen en die array in een $data variable zetten binnen je Config class. Dan kan dat hele switch statement weg. Is de Reader\JSON class wat anders dan de JSON class?
 
Joakim Broden

Joakim Broden

18/12/2012 11:14:39
Quote Anchor link
Wouter dat klopt helemaal, daarom wou ik nog een extra method maken als $driver een object is dat hij kijkt of het een legale reader etc is. Bedankt voor de tips..

Ik heb nu de onderstaande code, is dit een beetje goede OOP, zijn er nog tips/opmerkingen?

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
<?php
    if (null === $driver || (!is_object($driver) && !is_string($driver))) {
        throw new Exception\InvalidArgumentException(sprintf('Failed to initialize %s, driver object is not set.', __CLASS__));
    }
else if (is_object($driver)) {
        if (!$driver instanceof Reader\ReaderInterface) {
            throw new Exception\InvalidArgumentException(sprintf('Failed to initialize %s, driver object is not a valid reader.', __CLASS__));
        }
else {
            $this->catalogue->setData($driver->getData());
        }
    }
else if (is_string($driver)) {
        switch(strtoupper($driver)) {
            case
'INI':
                $driver = new Reader\Ini($parameters);
                break;
            case
'JSON':
                $driver = new Reader\Json($parameters);
                break;
            case
'XML':
                $driver = new Reader\Xml($parameters);
                break;
            default:

                throw new Exception\RuntimeException(sprintf('Failed to initialize %s, there is no driver avaible for "%s".', __CLASS__, $driver));
                break;
        }

                
        $this->catalogue->setData($driver->getData());
    }

?>
Gewijzigd op 18/12/2012 11:24:47 door Joakim Broden
 



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.