learnMedlem sedan jan. 20051 130 inlägg 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 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 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 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
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 Nu hänger jag med. Tack jme och spango!