webForumDet fria alternativet

Skicka med variabler i funktion... ibland

PHP

7 svar · 236 visningar · startad av nkrantz

Medlem sedan apr. 2002830 inlägg
Frågan#1

Hej,

Man kan ju definiera indata till funktioner i samband med att man skapar functionen. Typ: function funkNamn($foo = "bar"); Så som jag förstått det så tilldelas $foo "bar" om det är så att $foo inte definieras i anropet.

Men, jag får pase error på följande class:

class Admin_Group
{
	var $tbl_name;
	var $primary;
	
	function Admin_Group()
	{
		$this->tbl_name = "tbl_name";
		$this->primary = "primary_id";
	}

	function print_selector($option = "", $name = $this->primary)
{
.
.
.
.
.
.
.

Felkoden kommer på raden där print_selector finns och om jag tar bort $this->primary så funkar det, så jag misstänker att det är den privata variabeln som spökar.

Hur löser jag detta?

// Nippe

Medlem sedan sep. 20011 086 inlägg
#2
function print_selector($option = "", $name = false){
if(!$name) $name = $this->primary;
.
.
.

if(!$name) kan du byta ut till if($name === false) om du vill att $name ska kunna vara "0" eller liknande.

Medlem sedan apr. 2002830 inlägg
#3

Jo, så kan man ju göra, men varför funkar det inte att kalla på den privata variabeln i funtionen?

// Nippe

Medlem sedan sep. 20011 086 inlägg
#4

Jag vet inte, men gissar på att det inte går för att $this->name inte är konstant. Du kan inte heller skriva t.ex function a($b = $_POST['b']) (om jag nu inte minns helt fel, var ett tag sen jag försökte).

Medlem sedan apr. 2002830 inlägg
#5

Ah, där kanske vi har svaret! Fast det skumma är ju att $this->name deklareras i konstruktorn som skapar objektet innan funktionen kallas...

Nåja, får väl lösa det på annat sätt!

// Nippe

Medlem sedan sep. 20011 086 inlägg
#6

nkrantz skrev:

Ah, där kanske vi har svaret! Fast det skumma är ju att $this->name deklareras i konstruktorn som skapar objektet innan funktionen kallas...

Jo, men det är inte en konstant i koden/klassen utan endast konstant i objektet. Alltså det kan ju variera från objekt till objekt, medan "abc" är ju konstant hela tiden, om du förstår vad jag menar. :)

Medlem sedan apr. 2002830 inlägg
#7

Jo, men i sådana fall skulle man ju kunna argumentera att en in-variabel i ett funktionsanrop inte heller är konstant... Om jag skulle göra så att jag har en funktion som först hämtar värdet som $this->name har innan jag anropar funktionen och sedan lägger in det som in-parametervärde så skulle det ju funka...

Men nåja... ;)

Medlem sedan sep. 20011 086 inlägg
#8

Jo, men min gissning var att om du har ett defaultvärde på en parameter så ska det vara konstant, men det är som sagt en gissning.

257 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)