Jeg bryder mig bestemt heller ikke om den måde du gør det på. Og jeg har aldrig set noget der kunne bruges til at gøre variabler private på den måde; skulle det være muligt, må det have karakter af at være et meget grimt hack. Umiddelbart tror jeg Jimmi er inde på det reelle problem: forkert design...
Du giver ingen argumenter for at PHP5 ikke skulle være 100% objektorienteret -- men jeg er da enig med dig. Det kan man dog også sige Java heller ikke er, i modsætning til fx Ruby - og Smalltalk, efter sigende. Gør det nogen forskel?
Kan du gå mere i dybten om hvorfor det er forkert ? jeg forstår at det er forkert i oop, men forstår det på den anden side ikke fordi det jo netop er php.
Jeg har så at sige opgivet at få dem private, dette var mere et spørgsmål om jeg bare var en knallert eller hvad? så kunne jeg jo ændre på det, vi lærer hver dag.
Forskel ... overhovedet ikke jeg elsker php 5
Det kan forklares forholdvis enkelt. Hvis jeg har et æble og giver dette til dig i din hånd, har du et æble i den ene hånd. Hvis jeg giver dig æblet, og du ikke tager imod æblet, hvem har så æblet?
Hvis vi oversætter det til programmering, så er din hånd en variabel.
dvs. at vi har to variabler, en som er tom (din hånd - $var2) og en som indeholder et "æble" som en streng (min hånd - $var1).
Dette bliver til:
[code="php"]
$var1 = "æble";
$var2 = "";
$var2 = $var1; // $var2 har nu æblet.
$var1 = ""; // bare for at vise jeg ikke har det.
[/code]
Hvis vi taget det andet eksempel, hvor jeg har æblet, og giver det til dig, hvor du så ikke tager imod det, bliver det til følgende:
[code="php"]
$var1 = "æble";
$var2 = "";
$var1 = ""; // jeg har ikke æblet mere, men giver det ikke til nogen.
[/code]
Nu er begge variabler (personers hænder) tomme.
Det er det samme som der sker i din projekt klasse.
Du bliver simpelthen nødt til at tildele dine ting til prædefineret variabler, ellers bliver de væk på et tidspunkt. Det er det samme med eksemplet jeg gav omkring lokal variabler (variabler der bliver defineret i funktioner, og bruges der). Disse kan ikke tilgåes uden for funktionen -
medmindre du definere dem først.
eks.
[code="php"]
<?php
$var1;
function testFunction()
{
$var2;
$var2 = "asd";
$var1 = "tildelt i testFunction()"; // ikke smukt, men bare for at vise eksemplet.
}
echo "var1: ".$var1."<br />";
echo "var2: ".$var2."<br />";
?>
[/code]
Det som der så kommer på din skærm er følgende:
var1: tildelt i testFunction()
var2:Det kan endda også godt være at udskrivningen af $var2 giver en fejl, men siden det er php bliver der nok bare udskrevet "ingenting". Det er også dette der er med til at give fejl når du programmere. Det er tit og ofte fordi folk glemmer at initialisere sine variabler uden for lokal funktioner, og prøver at udskrive / bruge dem uden for lokal funktionerne.
Håber det hjælper...
Måske kan det også hjælpe dig, hvis du prøver at lave dette i et andet sprog, som er lidt mere type stærkt. Dette kunne f.eks. Java, C++, Pascal osv.
Eksempel i java:
[code="Java"]
public class Tester
{
public String var1;
public void testFunction()
{
String var2;
var2 = "asd";
var1 = "tildelt i testFunction()";
}
public static void main(String[]args)
{
Tester tester = new Tester();
tester.testFunction();
System.out.println("var1: "+tester.var1+"\\n");
System.out.println("var2: "+tester.var2+"\\n");
}
}
[/code]
kompiler fejlen er følgende:
Tester.java:20: cannot find symbol
symbol : variable var2
location: class Tester
System.out.println("var2: "+tester.var2+"\\n");
^
1 error
Indlæg senest redigeret d. 28.03.2006 11:02 af Bruger #2796