webForumDet fria alternativet

Variabler i klass

5 svar · 425 visningar · startad av learn

learnMedlem sedan jan. 20051 130 inlägg
#1

Jag håller på att skriva en klass i PHP och är nybörjare.

Vad jag har förstått ska de variabler som används i klassen deklareras i början av klassen (t.ex. "private $var;") och sedan "anropas" m.h.a. $this. Men om en variabel bara ska användas inuti en metod, t.ex. i en for-loop...

// En metod i klassen
function min_metod() {

    for($i=0; $i<$id; $i++) {

        // jadajada

    }

}

...ska jag även då deklarera denna (i detta fall $i)...?

Om inte, bör jag radera den "tillfälliga" variabeln när den använts klart (unset($i))?

Hur ska jag tänka?

jmeMedlem sedan maj 20012 237 inlägg
#2

Du deklarerar $i i for-loopen ($i = 0).

Jag brukar deklarera variabler inuti funktioner iaf för läsbarhetens skull.

Detta fungerar dock:

	public function bar()
	{
		$var = true;
		if($var == true)
		{
			$b = 10;
		}
		else
		{
			$b = 5;
		}
		
		echo $b; // 10
	}

Men se upp:

	public function foo()
	{
		$var = false;
		if($var == true)
		{
			$b = 10;
		}
		
		echo $b; // nu är $b inte deklarerad
	}
learnMedlem sedan jan. 20051 130 inlägg
#3

Så hur ser "grundregeln" ut för vad som ska deklareras i början av klassen och sedan "anropas" via $this?

jmeMedlem sedan maj 20012 237 inlägg
#4

Well, saker som t ex definierar klassen.

Vi kan ta ett exempel, människan. Människan privata variabler skulle kunna vara:

- age
- gender
- height
- nationality

class Human
{
	private $age;
	private $height;
	private $weight;
	private $gender;
	
	public function setAge($age)
	{
		$this->age = $age;
	}
	
	public function getAge()
	{
		return $this->age;
	}
	
	// osv
}
spangoMedlem sedan juni 20008 205 inlägg
#5

learn skrev:

Så hur ser "grundregeln" ut för vad som ska deklareras i början av klassen och sedan "anropas" via $this?

Det är väldigt enkelt att definiera, och jag tänker citera dig direkt: om en variabel bara ska användas inuti en metod, t.ex. i en for-loop ska den vara deklarerad i metoden. Eller kanske mer exakt, om den bara används av ett anrop av en metod.

Generellt gäller att man ska försöka hålla deklarationer så lokala som möjligt, eftersom det gör koden mer förståelig. Exempelvis, deklarerar du $i som en medlem i klassen går det inte att avgöra om min_metod får några bieffekter eller inte genom att bara titta på själva metoden, du måste gå igenom hela klassen för att kunna avgöra det.

learnMedlem sedan jan. 20051 130 inlägg
#6

Nu hänger jag med. Tack jme och spango!

133 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)