[php] Default function argument *

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik begin nu wat met classes te experimenteren, en ik gebruik nu deze code:

PHP:
1
2
public function ShowPreview($num_row) {
            if(!isset($num_row)) $num_row = $this->num_row;


Ik wil dit iets vereenvoudigen, ik heb immers geleerd dat je een standaardwaarde kan geven aan een argument. Net zoals dit bv:
PHP:
1
public function ShowPreview($num_row='6') {}


Maar als ik de standaard waarde wil geven via een variabele, deze zit in de class waarin deze functie zit, krijg ik een foutmelding.
PHP:
1
public function ShowPreview($num_row=$this->num_rows) {}

Is dit niet mogelijk en zo ja waarom? Hier is toch niets mis mee, je kan het immers wel een niet-variable standaardwaarde geven.
Het is inderdaad wel slechts 1 regel extra maar als ik het iets kan verkorten, waarom niet.
Maar m'n vraag is vooral waarom dit niet kan/mag, ik zie niet direct een veiligheidsrisico.

[ Voor 4% gewijzigd door Verwijderd op 31-01-2008 19:50 ]


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 19:51

Creepy

Tactical Espionage Splatterer

Ik neem ff aan dat je php gebruikt (zo te zien aan de $'s). Ik heb dat er ook even bijgezet in de titel.

Ik gok erop dat this niet beschikbaar bij de declaratie, maar pas tijdens de implementatie van je functie. Vandaar dat this alleen in een methode werkt.

[ Voor 42% gewijzigd door Creepy op 31-01-2008 19:36 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

Uit de manual : http://nl3.php.net/manual/en/functions.arguments.php
The default value must be a constant expression, not (for example) a variable, a class member or a function call.
Dat gaat dus helaas niet werken :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt, en weet iemand ook waarom precies?

Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

Verwijderd schreef op donderdag 31 januari 2008 @ 20:30:
[...]

Bedankt, en weet iemand ook waarom precies?
Er is toch geen reference naar $this in een lijst waar je wat parameters definieert :P Wat nou als je die functie static aanroept?

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

  • Punkie
  • Registratie: Oktober 2005
  • Laatst online: 15-08 20:48
Er is geen noodzaak om een default argument te willen die niet constant is. Daarvoor kun je gewone assignments (aan dit argument) in de function body gebruiken. Default arguments die constant kunnen daarin tegen wel door de compiler geoptimaliseerd worden.

Acties:
  • 0 Henk 'm!

Verwijderd

SchizoDuckie schreef op donderdag 31 januari 2008 @ 20:33:
[...]

Er is toch geen reference naar $this in een lijst waar je wat parameters definieert :P Wat nou als je die functie static aanroept?
Zolang het een methode is van de klasse waarvan hij 'this' opvraagt, en zolang die methode niet static is, dan bestaat 'this' dus wel ja.

En nu ken ik OO-PHP niet, maar als je een functie static aan kan roepen zonder er 'static' voor te hoeven zetten blijf ik lekker bij C# :P.

Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

Verwijderd schreef op vrijdag 01 februari 2008 @ 14:02:
[...]

Zolang het een methode is van de klasse waarvan hij 'this' opvraagt, en zolang die methode niet static is, dan bestaat 'this' dus wel ja.

En nu ken ik OO-PHP niet, maar als je een functie static aan kan roepen zonder er 'static' voor te hoeven zetten blijf ik lekker bij C# :P.
Dat kan ja. vergeet niet dat OO-PHP nog steeds een evolutie is van hoe vroegâh PHP3 was :P
Je zult vast wel dikke errors tegen gaan komen, maar toch O-)

Stop uploading passwords to Github!

Pagina: 1