__toString() method werkt niet

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Senior PHP developer

Functie Als Senior PHP developer heb je een sterke mening over de architectuur van projecten en de processen binnen het team. Je bent de sparringpartner voor je Team Lead. Ook ondersteun je met jouw kennis de minder ervaren developers in jouw team. Ze werken regelmatig aan projecten vanaf scratch en dit geeft ruimte om voor nieuwe technieken te kiezen. Naast het ontwikkelen van software ben je continue bezig om ook jezelf te ontwikkelen. Ze werken met o.a.: PHP, Laravel, Doctrine, PHP Unit, Behat, React, TypeScript, (My)SQL, Postgress, Redis, ElasticSearch, Docker, Nginx, GIT flow, JIRA, AWS. Eisen • HBO werk- en

Bekijk vacature »

Lasrobot Programmeur

Over de functie Off-line programma’s maken die het beste resultaat bij de lasrobot mogelijk maken De programma’s met behulp van teach verder optimaliseren Proactief meedenken over oplossingen en over de juiste invulling van lasmallen Het lasrobotproces zoveel mogelijk optimaliseren Over het bedrijf Onze opdrachtgever is gespecialiseerd in de engineering, productie en assemblage van samengestelde plaatwerkproducten en monodelen uit metaal. Onze klant werkt samen met het team aan de mooiste producten van de toekomst. Binnen dit bedrijf staat een sterk team van specialisten op het gebied van industrial design, mechanical engineering, in-house prototyping en all-round projectmanagement. Met daarbij uiteenlopende kennis in

Bekijk vacature »

C# .NET Developer

Functie omschrijving Wij zijn op zoek naar een C# .NET Developer voor een leuke opdrachtgever in de omgeving van Hilversum! Voor een leuk bedrijf in de omgeving van Hilversum zijn wij op zoek naar een Back-end developer die klaar is voor een nieuwe uitdaging. Ben jij iemand die graag aan verschillende projecten werkt en het ook leuk vindt om bij klanten op bezoek te gaan? Dan ben jij de perfecte kandidaat! Deze functie is erg divers, je moet dus goed kunnen schakelen. Je komt te werken in een klein team van developers. Binnen het bedrijf hangt er een gemoedelijke informele

Bekijk vacature »

C# developer

Functie Als ervaren Software Engineer wordt jij verantwoordelijk voor het bedenken en ontwikkelen van technische (maatwerk) oplossingen voor onze klanten en dit samen met de klant af te stemmen. Jij wordt o.a. verantwoordelijk voor de doorontwikkeling het software pakket welke voor ons enorm belangrijk is. Dit pakket zorgt er namelijk voor dat wij complete productielijnen kunnen aansturen en monitoren. Daarnaast heb jij actief contact met onze hoofdvestiging om het software achter een van onze systemen te verbeteren en te herschrijven. Momenteel zijn onze C# applicaties geschreven met o.a. Winforms. Echter hebben wij de actieve ambitie om dit te gaan herschrijven

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 »

Front end developer

Functie Binnen de functie van Front-end developer werk je mee aan uitdagende klantprojecten. In teamverband werk je aan de voorkant van onze state-of-the-art portaal oplossingen en apps. Dit alles gebeurt in een multidisciplinaire omgeving waarbij je de ruimte hebt om te sparren, je ideeën scherp te stellen, en waar je met de benodigde kennis en ervaring om je heen altijd terecht kunt bij je collega’s voor vragen en ondersteuning. Meestal werk je vanuit ons kantoor maar we bieden ook alle faciliteiten om thuis te kunnen werken. Voor sommige projecten ga je mee naar de klant, wellicht zelfs in het buitenland!

Bekijk vacature »

Junior/medior PHP developer Onderwijssector

Functie Momenteel zijn ze op zoek naar een developer die, veelal fullstack, mee gaat werken aan de ontwikkeling van de producten en zo helpt aan de uitvoering van hun ontwikkelprojecten. Je komt te werken binnen hun development team bestaande uit 6 ontwikkelaars. Ze staan zowel open voor meer junior als medior/senior developers. Je kunt snel veel verantwoordelijkheid krijgen en doorgroeien binnen het bedrijf. Bovendien ben je betrokken bij het bepalen van de product roadmap en de inbreng van (nieuwe) technologieën. De applicaties waaraan je werk worden gebruikt op onderwijsinstellingen door heel Nederland. De tech-stack bestaat voornamelijk uit Laravel (PHP), Vue.js

Bekijk vacature »

Traineeship ICT regio Amsterdam/Utrecht

Wat ga je doen? Het traineeship begint met een fulltime maand cursussen en praktijkdagen, waarin je de basis van het IT-vak leert op de Shared Servicedesk (SSD). Daarnaast ga je meteen aan de slag voor je eerste certificering! (ITILv4). Je start in een groep met 4 tot 10 deelnemers, waarmee jij gedurende die maand optrekt en je kennis kunt delen. Na het voltooien van de eerste maand ga je direct voor een langere periode aan de slag bij één van onze klanten of blijf je intern bij ons op de Shared Servicedesk. Je bent het eerste aanspreekpunt van de eindgebruikers

Bekijk vacature »

Junior PHP ontwikkelaar

Functie Wij hebben onlangs onze eerste collega’s aangenomen, waardoor ons development team momenteel uit 4 personen bestaat. We bouwen onze software op basis van een PHP-framework (wat op zichzelf een Symfony framework is). Qua ontwikkeling focussen wij ons op 3 focus velden; – API-ontwikkeling/ Component Creatie – Implementatie – Framework ontwikkeling; het toevoegen van nieuwe functionaliteit of interne microservices Onze senior software engineer focust zich momenteel op de laatste twee punten, maar wij komen handen te kort op het eerste veld. Daarom zijn wij op zoek naar een enthousiaste junior software engineer die graag de kneepjes van het vak wil

Bekijk vacature »

PHP/Symfony developer

Functieomschrijving Vanuit het hoofdkantoor in omgeving Bergen op Zoom ben je als PHP/Symfony Developer niet alleen bezig met software ontwikkeling. Je bent buiten ontwikkeling ook continu bezig met het zoeken naar nieuwe trends en ontwikkelingen die van waarde kunnen zijn voor de efficiëntie van software ontwikkeling. Techstack: PHP, Symfony & mySQL. Jouw takenpakket ziet er als volgt uit: Het ontwerpen en implementeren van webapplicaties met het Symfony-framework; Het testen van ontwikkelde applicaties om te zorgen dat ze goed functioneren en voldoen aan de eisen van de klanten; Het schrijven van een schone en efficiënte code volgens het Symfony framework; Onderhouden

Bekijk vacature »

SQL developer

Functieomschrijving Voor een erkende werkgever in de omgeving van Tilburg zijn wij op zoek naar een ervaren SQL ontwikkelaar. Hier wordt jij mede verantwoordelijk voor zowel de design en implementatie van SQL-databases als voor het verstaan van de processen van klanten naar het vertalen van deze processen naar IT-oplossingen. Jouw takenpakket komt er als volgt uit te zien: Het ontwerpen en implementeren van databaseschema's: Je bent in staat om een database te ontwerpen en de structuur van tabellen, relaties, indexen en andere objecten te definiëren; Het schrijven van complexe SQL-query's: Je kunt complexe query's schrijven om gegevens uit de database

Bekijk vacature »

Lead developer

Functie Als lead developer wordt jij verantwoordelijk voor een van onze development teams. Samen met de Software Architect bewaak jij de kwaliteit en uitvoering van onze complexe vraagstukken. Daarnaast ben jij verantwoordelijk voor het inschatten, designen en ontwikkelen van middelgrote tot grote veranderingen in de software. Ook coördineer jij het proces rondom complexe technische vraagstukken. Verder bestaat jouw takenpakket uit het volgende: – Het aansturen van jouw development team; – Het begeleiden van Junior Software Engineers; – Het maken van technische analyses m.b.t. nieuwe aanvragen en het tijdsbestek inschatten voor de uitvoering hiervan; – Het uitvoeren van de ontwikkeling van

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 »

Fullstack Webdeveloper .NET Azure Big Data SaaS

Bedrijfsomschrijving Deze klant van ons is recentelijk onderdeel geworden van een grote moederorganisatie, ze zijn dé partij als het gaat om software maken voor ambitieuze ondernemers, ze maken maatwerk software. Vanuit het fantastisch vormgegeven hightech gebouw te Rotterdam centrum werken ze met zo'n 40 medewerkers aan hoogwaardige software gericht op financiële data, betaalinformatie, maar ook backoffice software. De software wordt webbased, desktop en mobile aangeboden en er worden zeer moderne ontwikkeltechnieken toegepast. Je moet dan denken aan patroonherkenning, Big Data, Machine Learning en OCR. Als Developer, ongeacht je niveau, ga je hier te maken krijgen met de allerleukste kant van

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 »
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

29/04/2024 12:42:25
 
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.