[PHP] Class Type Hints

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
De titel is misschien niet helemaal duidelijk maar het probleem heeft er in ieder geval mee te maken.
Ik zat namelijk een beetje met php5 te pielen (classes enzo) en nu kwam ik toch bij het probleem dat iets als dit niet mogelijk is:
PHP:
1
2
3
4
5
6
7
8
9
class test
{
//blabla, boeit niet zo wat hierin staat
}

function test2(test[] $test)
{

}

dit geeft natuurlijk een error, maar het doel zou dus moeten zijn dat die functie per se een array met objecten van dat type wil.
is hiervoor misschien een mogelijkheid of zou ik hier gewoon niet van class hint gebruik moeten maken?

Acties:
  • 0 Henk 'm!

  • Evilbee
  • Registratie: November 2002
  • Laatst online: 19:55
Ik heb me nog niet helemaal verdiept in php5, maare moet
PHP:
1
2
3
4
function test2(test[] $test) 
{ 

}
niet
PHP:
1
2
3
4
function test2(string[] $test) 
{ 

}
zijn?

[ Voor 32% gewijzigd door Evilbee op 09-05-2004 20:57 ]

LinkedIn - Collega worden?


Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?
class test
{
//blabla, boeit niet zo wat hierin staat
}

function test2(test $test = array())
{

}
?> 

zoiets?

[ Voor 8% gewijzigd door PrisonerOfPain op 09-05-2004 21:03 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@Evilbee

Nope, om 2 reden eigenlijk, als eerst moet het het type test zijn ipv string en als tweede geeft ie een error als je [] gebruikt op die plaats.

@PrisonerOfPain
ik heb het ff getest, maar ook dit geef een error zoals:
code:
1
PHP Fatal error:  Argument 1 must be an object of class test in class.php on line 14

Acties:
  • 0 Henk 'm!

  • seweso
  • Registratie: Augustus 2003
  • Laatst online: 04-04-2018

seweso

de mouw is uit de aap

PHP is niet een sterk getypeerde taal. Dat betekent dat elke variabele van elk type kan zijn (net als de variant in menig andere programmeer-taal), en daar horen items in een array ook bij (elk item kan dus ook van elk type zijn).

Wat jij wil kan niet, alternatieven zijn:
• Een andere programmeer-taal
• De eisen voor de functie opnemen in de documentatie
• Run-time controle van de gegeven parameters

[ Voor 6% gewijzigd door seweso op 09-05-2004 21:26 ]

seweso's blog


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
seweso schreef op 09 mei 2004 @ 21:25:
PHP is niet een sterk getypeerde taal. Dat betekent dat elke variabele van elk type kan zijn (net als de variant in menig andere programmeer-taal), en daar horen items in een array ook bij (elk item kan dus ook van elk type zijn).

Wat jij wil kan niet, alternatieven zijn:
• Een andere programmeer-taal
• De eisen voor de functie opnemen in de documentatie
• Run-time controle van de gegeven parameters
[streepdoorheen]hmm, php is wel makkelijk door al die build in functies... dus denk dat ik maar ff goeie doc maak, want het was eigenlijk alleen voor de duidelijkheid dat ik niet per ongeluk verkeerde stuff in functies zat te proppen enzo ;)

bedankt![streepdoorheen/]

khad je bericht niet helemaal goed gelezen, maar het is dus deels wel mogelijk met php5 :)

[ Voor 8% gewijzigd door Verwijderd op 09-05-2004 21:32 ]


Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
seweso schreef op 09 mei 2004 @ 21:25:
PHP is niet een sterk getypeerde taal. Dat betekent dat elke variabele van elk type kan zijn (net als de variant in menig andere programmeer-taal), en daar horen items in een array ook bij (elk item kan dus ook van elk type zijn).

Wat jij wil kan niet, alternatieven zijn:
• Een andere programmeer-taal
• De eisen voor de functie opnemen in de documentatie
• Run-time controle van de gegeven parameters
Uhm word eens up to date :p PHP5 heeft typehints voor classes ;)

Acties:
  • 0 Henk 'm!

  • ludo
  • Registratie: Oktober 2000
  • Laatst online: 26-04-2024
In PHP5 kan je inderdaad typehints gebruiken, maar volgens mij is het niet mogelijk om een verzameling van objecten zo aan te geven. Verder dan de hint 'test' zal PHP5 denk ik niet komen... Best jammer, maar misschien in PHP6 :Y)

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:27

.oisyn

Moderator Devschuur®

Demotivational Speaker

Nou ben ik niet zo heel erg thuis in PHP5 zelf, maar wel in compilerdevelopment, en wat je wilt kan waarschijnlijk gewoon niet :)

Zo'n typehint is alleen maar iets dat aangeeft: "deze parameter moet van dat type zijn". Jij wil echter een array van types; dat is niet een type op zich. PHP behandelt een array van ints niet anders dan een array van tests, en een array kan ook meerdere types bevatten. PHP hangt aan een array geen vlaggetje dat aangeeft "hier zitten alleen maar tests in" oid, en het is dus ook niet makkelijk mogelijk om dat te controleren bij een functieaanroep. Hij zou natuurlijk wel de hele array af kunnen scannen, maar dat is meestal niet iets wat je als gebruiker wilt omdat dat nogal performance kan kosten.

Maar goed, zoals ik al zei, ik ken PHP5 niet goed, en het verbaasd me niets als die achterlijke coders @ Zend het toch wel geimplementeerd hebben op die manier :Y)

[ Voor 11% gewijzigd door .oisyn op 10-05-2004 00:09 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • seweso
  • Registratie: Augustus 2003
  • Laatst online: 04-04-2018

seweso

de mouw is uit de aap

PrisonerOfPain schreef op 09 mei 2004 @ 21:27:
[...]

Uhm word eens up to date :p PHP5 heeft typehints voor classes ;)
PHP5 bestaat voor mij nog niet aangezien daar nog geen stabiele versie van is.

Je kunt volgens mij omzeilen dat de type-hints niet voor (elementen in) arrays werkt door een eigen container class te maken (de class array overloaden als het ware)...

seweso's blog


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
seweso schreef op 10 mei 2004 @ 07:30:
[...]


PHP5 bestaat voor mij nog niet aangezien daar nog geen stabiele versie van is.

Je kunt volgens mij omzeilen dat de type-hints niet voor (elementen in) arrays werkt door een eigen container class te maken (de class array overloaden als het ware)...
hmm, het kan aan mij liggen maar is het overloaden niet ongeveer het zelfde als een cast (gewoon type veranderen zeg maar).
als dat het geval is werkt het niet.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class testarray
{

}

class test
{

}

function blaat(testarray $ta)
{
    print_r($r);
}

$ar=array(new test,new test);
print_r($ar);
$ta_ar=(testarray)$ar;
blaat($ta_ar);


een cast (hier dus $ta_ar=(testarray)$ar;) wil niet werken op zelf gedefinieerde classes/objecten.

Acties:
  • 0 Henk 'm!

  • seweso
  • Registratie: Augustus 2003
  • Laatst online: 04-04-2018

seweso

de mouw is uit de aap

Als je probeert te programmeren in PHP alsof het een sterk-getypeerde taal is dan loop je uiteraard snel tegen problemen.

Een sterk getypeerde taal heeft de volgende voordelen:
• je code is automatisch begrijpbaarder (zelf documenterende code), hierdoor heb je meteen ook minder kans op bugs.
• compile-time optimalisatie (er hoeft simpelweg minder werk tijdens run-time gedaan worden, omdat er niet telkens gecontroleerd hoeft te worden welk type een variabele is)

Waarom wil jij een sterk-getypeerde taal?

seweso's blog


Acties:
  • 0 Henk 'm!

  • MisterData
  • Registratie: September 2001
  • Laatst online: 29-08 20:29
Voorzover ik weet kan Pike dat allemaal wel, is strong-typed enzo, ook heel veel built-in functies, dus kijk er eens naar :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
seweso schreef op 11 mei 2004 @ 13:20:
[...]
Waarom wil jij een sterk-getypeerde taal?
nou, dat komt eigenlijk omdat ik eerst bietje in cpp heb zitten hobbyen maar daar miste ik eigenlijk gewoon al die buildin functies die php zo handig maken...
maar ik zal dat Pike eens bekijken... misschien is dat een betere oplossing :p

Acties:
  • 0 Henk 'm!

  • seweso
  • Registratie: Augustus 2003
  • Laatst online: 04-04-2018

seweso

de mouw is uit de aap

Verwijderd schreef op 11 mei 2004 @ 23:21:
[...]


nou, dat komt eigenlijk omdat ik eerst bietje in cpp heb zitten hobbyen maar daar miste ik eigenlijk gewoon al die buildin functies die php zo handig maken...
maar ik zal dat Pike eens bekijken... misschien is dat een betere oplossing :p
Kijk, ik dacht al dat het gewoon een omschakel probleem was.

Verder moet ik wel zeggen dat je - door die missende features in PHP - op geen enkele manier beperkt word, het is hooguit iewat onhandig.

* seweso vind dat pike eigenlijk wel reuze interessant...

seweso's blog


Acties:
  • 0 Henk 'm!

  • MisterData
  • Registratie: September 2001
  • Laatst online: 29-08 20:29
seweso schreef op 12 mei 2004 @ 10:55:
[...]

* seweso vind dat pike eigenlijk wel reuze interessant...
Ik ook, ik heb alleen nog geen manier gevonden om Pike als Apache-module of CGI te gebruiken, aangezien ik geen zin heb om mijn Apache in te ruilen voor de Roxen-webserver, die dat blijkbaar wel kan...

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
seweso schreef op 12 mei 2004 @ 10:55:
[...]
Kijk, ik dacht al dat het gewoon een omschakel probleem was.
hihih, ik programeer al voor jaartje of 3-4 php, en paar maandjes cpp, maar ik vond het in cpp wel erg handig dat je aan alles aan kan geven wat het moet zijn :)

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:27

.oisyn

Moderator Devschuur®

Demotivational Speaker

zoals het hoort ;)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1