__toString() method werkt niet

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Back end developer Digital Agency

Functie Wij zijn van origine een wordpress bureau, maar sinds 2006 zijn wij dit wel redelijk ontgroeid. Naar mate de jaren verstreken zijn we gegroeid in omvang, maar ook in de complexiteit van opdrachten waarin wij onze klanten kunnen bedienen. Momenteel bestaat onze organisatie uit 4 front end developers, 12 back end developer 3 projectmanagers en een 2 koppig management. Wij zijn een hele informele, bijna familiaire organisatie. Geen strak pak of overhemd, nee gewoon dragen waar jij je prettig bij voelt. De gemiddelde leeftijd ligt tussen de 25 en 30 en wij doen er veel aan om onze hechte

Bekijk vacature »

Back-end .NET Developer

Functie omschrijving C# / .NET Developer gezocht voor een dynamische organisatie in de regio Houten! Voor een leuke organisatie in de regio Houten zijn wij op zoek naar een Back-end developer die klaar is voor een nieuwe uitdaging. In deze functie werk jij aan verschillende projecten en ga je vaak bij klanten op bezoek. Binnen deze functie kun je een grote mate van uitdaging, diversiteit en verantwoordelijkheid treffen. Bedrijfsprofiel Waar ga je werken? Het bedrijf waar je gaat werken is gespecialiseerd in het ontwerpen en implementeren van procesautomatisering en procesinformatisering. Zij doen dit onder andere voor de (petro)chemie, pharma, infra,

Bekijk vacature »

Back End Developer .NET

Dit ga je doen Ontwikkelen in C# .NET en werken aan nieuwbouw, uitbouw en onderhoud van de software (die communiceren met 68.000 sensoren, waardoor er meerdere miljoenen berichten per uur verwerkt worden); Samenwerken in Scrum Teams; Meewerken aan verschillende, uitdagende projecten; Werken met nieuwe technologieën en vrijheid krijgen om jezelf te ontwikkelen en door te groeien. Hier ga je werken Je komt als Developer te werken bij een organisatie die gespecialiseerd is in software die real-time wordt gebruikt. De software constateert waar werk moet worden uitgevoerd en de chauffeurs worden met een andere applicatie hierop geattendeerd. Ook wordt er direct

Bekijk vacature »

C# .NET Software Developer

Functie omschrijving Ben jij op zoek naar een nieuwe uitdaging binnen software development waar je gaat werken voor een jong en flexibel bedrijf? Lees dan snel verder! Wij zijn op zoek naar een Software Developer met ervaring binnen C# .NET die enthousiast wordt van het aansluiten en begeleiden van (complexe) nieuwe klanten. Verder begeleid je complexe projecten, ben jij iemand die altijd kansen ziet? Dan zoeken wij jou! In deze functie ga jij je bezighouden met: Meedenken in oplossingsrichtingen; Werken aan de architectuur; Het verbeteren van functionaliteiten binnen het dataplatform; Ontwikkelen van nieuwe technologieën. Bedrijfsprofiel Waar ga je aan de

Bekijk vacature »

Digital Agency is looking for PHP developers!

Functie The team currently has 20 colleagues, consisting of developers (front and backend) and the operations team, which also includes management and two scrum masters. They are looking for a PHP developer who is able to work independently. You will work in one of the three scrum teams and start working on a project for the customer. The interesting thing about this is that you do have variety in terms of work, but at the same time continuously work for existing customers. This also gives you the opportunity to really go into depth and develop innovative technical solutions. In terms

Bekijk vacature »

Software developer

Functieomschrijving Voor een gewaardeerde werkgever in de regio van Middelburg zijn wij op zoek naar een ambitieuze PHP/Symfony Developer. Een enthousiast persoon die het development team komt versterken met het aanpakken van complexe en nieuwe projecten. Ben jij op zoek naar een baan met veel uitdaging binnen een snelgroeiend e-commerce bedrijf, waar je de tijd en ruimte krijgt voor zowel persoonlijke als professionele groei? Lees dan snel verder! Dit ga je doen: Aanpassingssuggesties van collega’s in kaart brengen, vervolgens te analyseren en daarna te concluderen of de aanpassing een verbetering is; Ontwikkeling en beheer van de serviceportal in Symfony en

Bekijk vacature »

Back-End Developer in Laravel / PHP

Functie omschrijving Wij zijn op zoek naar een Medior PHP Laravel Developer voor een gaaf bedrijf in de omgeving van Amsterdam! Voor een enthousiast team die zich graag bezig houdt met softwareontwikkeling zijn wij op zoek naar versterking. Je werkt in een klein ontwikkelteam en bent zeer betrokken bij alle aspecten van de softwareoplossingen. Van het ontwerpen tot de oplevering. Binnen deze functie ga je aan de slag met het aanpassen, verbeteren en vernieuwen van de logistieke oplossingen. Je krijgt veel te maken met koppelingen naar systemen en de verzoeken van de klant. Je komt terecht in een team, waarbij

Bekijk vacature »

Java Full Stack Developer

Java Full Stack developer What makes Cognizant a unique place to work? The combination of rapid growth and an international and innovative environment! This is creating a lot of opportunities for people like YOU — people with an entrepreneurial spirit who want to make a difference in this world. At Cognizant, together with your colleagues from all around the world, you will collaborate on creating solutions for the world's leading companies and help them become more flexible, more innovative and successful. And this is your chance to be part of the success story: we are looking for a (Senior) Java

Bekijk vacature »

Fullstack Developer TOTO

Do you want to work with the latest technologies on the development of new systems and applications? Get moving and strengthen Nederlandse Loterij as a Fullstack Developer TOTO. Thanks to your efforts, complex business critical applications are always running smoothly. In this way, you directly contribute to a happy, healthy and sporty Netherlands. As a Fullstack Developer you score by: Taking ownership of the development cycle of an application in a large scale, high availability, geo redundant landscape Coaching your peer developers and safeguarding code quality Integrating the application with other components of the system using the available API’s Managing

Bekijk vacature »

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 »

Grafisch vormgever

Standplaats: Maasland Aantal uren: 32 – 40 uur per week Opleidingsniveau: HBO werk- en denkniveau Ben jij een ambitieuze grafisch vormgever met een passie voor creativiteit en oog voor detail? Vind jij het daarnaast leuk om ook marketingactiviteiten op te pakken? Dan zijn wij op zoek naar jou! Bedrijfsinformatie Westacc Group BV is het zusterbedrijf van HABA en specialiseert zich in (maatwerk) oplossingen voor (elektro) techniek en verlichting in de kampeerbranche. Zij produceren en assembleren onderdelen voor caravans, campers en boten. Voor een groot aantal caravan- en campermerken leveren wij producten als zekeringkasten, invoerdozen, acculaders, schakelmateriaal en verlichting. De producten

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 »

Cymer Patch Server Developer

Vacature details Vakgebied: Software/IT Opleiding: Senior Werklocatie: Veldhoven Vacature ID: 12919 Introductie This new patch server will be built on Python and Django ReST and GraphQL services with a React frontend, it will consist of several microservices and run on a Kubernetes cluster. It will be supported by several middleware applications such as ElasticSearch, Redis, RabbitMQ, Oracle and Artifactory. Functieomschrijving The Patch Admin team always aim to deliver software at a high quality, we avoid sacrifices here to maintain our velocity. Practically this means that we practice test driven development and perform end-to-end automated testing on our software. This means

Bekijk vacature »

Software Programmeur

Functie omschrijving Voor een informele club in omgeving Delft zijn wij op zoek naar versterking. Ben jij op zoek naar een nieuwe uitdaging als Software Programmeur lees dan snel verder! Als ontwikkelaar kom je terecht op een afdeling van 6 medewerkers. Werkzaamheden Programmeur Je bent bezig met het ontwikkelen van software en webapplicaties. Je kunt technische klussen uitvoeren op locatie. Je onderhoudt contact met de projectleider om er zeker van te zijn dat een project goed verloopt. Je zult klanten ondersteunen. Verder zul je technische ontwerpen en gebruikersdocumentaties schrijven en deze onderhouden. Er wordt voornamelijk gewerkt met PHP, Java en

Bekijk vacature »

Medior PHP Developer

Bij Getnoticed doen wij wat we leuk vinden, websites bouwen en online marketing. Voor veel van onze klanten doen we dan ook allebei. Wel zo fijn om campagnes te draaien voor conversiegerichte website die in eigen beheer zijn. In onze vestiging in Nederweert zitten onze development afdelingen en worden de websites gebouwd. Op dit moment zijn we op zoek naar jou: dé PHP/Back-end developer die net als wij, het hoofd boven het maaiveld durft uit te steken! In het kort Even een paar punten die omschrijven wat deze toffe baan inhoudt: Het bedenken van nieuwe functionaliteiten Het verbeteren van het

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

05/11/2024 17:33:28
 
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.