__toString() method werkt niet

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ventilatiesysteem Productontwikkelaar HBO WO Verwa

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

Bekijk vacature »

PHP Software Developer

Functie omschrijving PHP Software Developer gezocht! Voor een organisatie in de regio Zeist die zich bezighoud met het verbeteren van de medicatieveiligheid zoeken wij een Software Developer. In deze functie zijn wij op zoek naar een slimme en enthousiaste Developer die interesse heeft in farmacie, logistiek en ICT. Daarnaast beschik je over een goed analytisch vermogen en ben je van nature gestructureerd en resultaatgericht. Je moet in deze functie daadkrachtig, flexibel en communicatief goed zijn. Je verantwoordelijkheden bestaan uit: Object georiënteerd programmeren; Werken in een scrumteam aan de ontwikkeling van een medicatiebewakingssysteem; Meedenken over de mogelijkheden en onmogelijkheden van projecten;

Bekijk vacature »

Android developer

De functie Schiphol is een plek om te reizen, te verblijven en te werken. Door middel van data en technologie richten we op al deze gebieden het leef- en werkklimaat optimaal in en zorgen we voor een slimmere en efficiëntere operatie. Wij ontwikkelen nieuwe producten en diensten vanuit de wensen en behoeften van onze klanten, voorspellen passagier flows en testen digitale oplossingen om rijen en andere pijnpunten in het proces te verminderen. Met slimme feedback van sensortechnologie maken we zelfs data van toiletten en stoelen inzichtelijk en bruikbaar. Het Commercial Platform bestaat uit multidisciplinaire teams met een end-2-end verantwoordelijkheid voor

Bekijk vacature »

Back-end programmeur

Functieomschrijving Heb jij kort geleden jouw HBO ICT diploma in ontvangst mogen nemen? Of ben je toe aan een nieuwe uitdaging? Voor een uitdagende werkgever in omgeving Waalwijk zijn wij op zoek naar een enthousiaste softwareontwikkelaar met kennis of ervaring met C# en SQL. In een uitdagende rol als C#.NET Developer werk je samen met een enthousiast en informeel team aan het bouwen van maatwerk software voor variërende klanten. Verder ziet jouw takenpakket er als volgt uit: Je draagt bij aan de implementatie van aanpassingen, verbeteringen en aanvullingen in de C# based applicaties; Je houdt je bezig met het ontwikkelen

Bekijk vacature »

Java (Java EE) Developer

In het kort Werken als Java developer betekent werken aan complexe IT projecten bij onder meer een internationaal containeroverslag bedrijf. Zo sturen we apparaten en eindgebruikers aan d.m.v. onze custom-made software oplossing, die dagelijkse vele duizenden containers verwerkt. Denk aan systemen die volautomatische kranen aansturen en op afstand bedienen, de volledige afhandeling van containernummerherkenning bij het laden en lossen van zeeschepen of het tonen van instructies aan de chauffeurs van ruim 300 straddle carriers. En dat allemaal redundant, robuust en in een dynamische 24/7 omgeving! Jij versterkt ons ontwikkelteam en gaat aan de slag met oa. Java i.c.m. Spring (Boot),

Bekijk vacature »

Software Ontwikkelaar .NET te Zaandam

Bedrijfsomschrijving Je komt hier terecht bij een door-en-door softwarebedrijf, waarbinnen meerdere SaaS pakketten worden ontwikkelt voor diverse sectoren. Hierbij kun je denken aan bijvoorbeeld de logistieke en medische branche. Deze organisatie kenmerkt zich door de hoge mate van complexiteit in de applicaties, wat betekent dat jij je hier niet zal gaan vervelen. Integendeel: Jij gaat hier elke dag ontzettend veel leren en je in razend tempo ontwikkelen als C# .Net Developer met focus op back-end. Het team bestaat uit ongeveer 20 personen personen, waarvan het grootste deel zich richt op software development. De sfeer is informeel en professioneel. De producten

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 »

Junior Software Developer (HBO / WO)

Functie omschrijving Voor een leuke opdrachtgever zijn wij op zoek naar een Junior Software Developer! Sta jij aan het begin van je carrière en heb je net je HBO of WO-diploma in de richting van ICT of Techniek mogen ontvangen? En heb jij grote affiniteit met software development? Dan hebben wij bij Jelling IT Professionals de perfecte opdrachtgever in de omgeving van Hoofddorp. Binnen deze functie vervul je een onsite learning programma waarbij je aan de slag gaat met PHP en Laravel. Hierbij ben je voornamelijk werkzaam op verschillende klantlocaties en is het jouw taak om hun wensen en eisen

Bekijk vacature »

Oracle Apex Developer

Dit ga je doen Jouw taken bestaan uit: Het bouwen maatwerk Oracle applicaties voor Europese business units; Het implementeren van de nieuwste technieken om te blijven innoveren; Actief meedenken en aandragen van verbetervoorstellen. Hier ga je werken Deze organisatie in de regio Veenendaal is een van wereld grootste retailers met ruim 16.000 winkels in 27 markten en jaarlijks ruim 5,3 miljard klanten die winkelen bij een van hun welbekende retailmerken. Binnen de organisatie is er een IT Group actief die dient als IT Service Provider voor de hele organisatie en waar dagelijks IT'ers werken aan state-of-the-art IT oplossingen. Dit doen

Bekijk vacature »

Front-End React Developer

Als Front-End React Developer verbeter je de user experience van onze eigen webapplicaties voor onze collega's binnen Coolblue. Wat doe je als Front-End React Developer bij Coolblue? Als Front-end React Developer werk je aan de gebruiksvriendelijkheid van onze webshop voor miljoenen klanten met React.js. Je vindt het leuk om samen te werken met de UX designer om stories op te pakken. Daarnaast ben je trots op je werk en verwelkomt alle feedback. Ook Front-end React Developer worden bij Coolblue? Lees hieronder of het bij je past. Dit vind je leuk om te doen Verbeteren van de gebruiksvriendelijkheid van onze webshop

Bekijk vacature »

Medior/Senior Python developer (Django)

Functie Je komt te werken in het IT-team bestaande uit de Lead developer en 4 (medior/senior) developers. Gezamenlijk werken jullie aan de verbetering en uitbreiding van de software. Binnen het development team is er veel vrijheid en zelfstandigheid, zonder dat ze hiermee afdoen aan de kwaliteit. Zo hebben ze elke ochtend een korte stand-up (10:00 uur) en werken ze met pair-programming sessies. Ook is er een hele professionele ontwikkelcyclus waarbij code altijd eerst door een collega wordt getest voordat het naar deployement gaat. Er is een kwaliteitsfocus en dan biedt ruimte om verbeteringen echt door te voeren binnen de gehele

Bekijk vacature »

Senior Applicatie ontwikkelaar Java

Bedrijfsomschrijving De IV- organisatie van de Belastingdienst is verantwoordelijk voor en verzorgt de ICT- voorzieningen. Het merendeel van de applicaties wordt op dit moment door de IV- organisatie zelf ontwikkeld, onderhouden en beheerd in het eigen data center. Naast de zorg voor continuïteit op de massale heffing- en inningsprocessen die plaatsvinden binnen een degelijke, stabiele omgeving, wordt er tevens volop gewerkt aan modernisering van het IV- landschap. Dit gebeurt deels intern door gebruik te maken van de expertise die intern aanwezig is, maar ook door het aantrekken van (kant-en-klaar) oplossingen en expertise uit de markt. Functieomschrijving We verwachten van je,

Bekijk vacature »

.Net Front-end Ontwikkelaar

Wij zoeken een .Net Front-end Ontwikkelaar! Omschrijving Kun jij snel schakelen en ben je stressbestendig? Dan zoeken wij jou! Als .Net Front-end Ontwikkelaar help je mee aan de webapplicatie die over de hele wereld door allerlei bedrijven wordt gebruikt. Je werkt daarnaast mee aan nieuwe en verbeterde functionaliteiten en helpt met het oplossen van bugs. Over de opdrachtgever Je komt te werken in een ambitieus team dat zich blijft ontwikkelen. Dit is alle informatie die we nu kunnen delen over de werkplek. Als jij de .Net Front-end Ontwikkelaar bent voor deze job, vertellen we je snel nóg meer. Eisen Heb

Bekijk vacature »

Senior Software Developer C++

Vacature details Vakgebied: Software/IT Opleiding: Senior Vacature ID: 13342 Introductie Do you want to work for one of the most innovative companies located in the region of Eindhoven. Currently Due to growth we are looking for a Senior Software Developer. Our client is a high-tech company with international roots and can provide you with a challenging opportunity. Functieomschrijving Responsibilities: Design, develop, and maintain high-quality software applications in C++ Collaborate with other engineers, product managers, and stakeholders to understand requirements and develop solutions Write clean, maintainable, and efficient code Conduct thorough testing and debugging to ensure high-quality software Optimize applications for

Bekijk vacature »

BizTalk/ Azure Developer

Dit ga je doen •Understanding the scope of required functionality, translate them within context of way of working of the team into developed solutions, whilst safeguarding documentation; •Planning based on assigned sprint tasks; •Acting as an expert in estimation techniques and planning; •Understanding your role in the agile process and act in this way; •Facilitating internal communication and effective collaboration; •Working closely with scrum master to handle backlogs and new requests; •Providing information to the third parties about activities and needs for compliance. Hier ga je werken Our client is a leading organization focusing on animal nutrition, offering solutions that

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

28/11/2024 14:53:14
 
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.