Avatar billede webcreator Nybegynder
11. august 2005 - 21:07 Der er 24 kommentarer og
1 løsning

Objekt-orienteret

Hej Eksperter.

Jeg har programmeret PHP i et par år nu, og føler efterhånden at jeg er blevet ganske god til det. Men jeg er ikke tilfreds med den måde jeg koder det på. Jeg vil gerne tættere på den facon som jeg kender fra C# .NET, hvor jeg kan adskille GUI fra den egentlige logik. Dette mener jeg delvist at kunne opnå med et objekt baseret system. Godt nok ikke med objekter til data, men som klasser med funktioner. På den måde kan jeg forhåbentligt adskille det "egentlige" system fra den grafiske tilgang.

Jeg kunne i den forbindelse godt tænke mig at høre lidt om, hvordan jeg bør gribe dette an. Jeg ser gerne at der optræder så lidt PHP kode i mine HTML filer som muligt. Men det er til gengæld  ikke helt nemt. Der skal jo både hentes data fra forms, udskrives data osv. Men jeg kan i det mindste spare en masse kode i toppen af mine sider, hvor jeg plejer at validere mine data.

Men allerede nu er jeg stødt på et problem. Af min kode nedenfor fremgår et simpelt eksperiment - og det virker selvfølgelig ikke. Jeg får en fejl i linien 'var (string)$output;'. Hvordan kan det være? Jeg har normalt ikke erklæret mine variabler med 'var' før. Men jeg har set at man gør det i andre eksempler på nettet. Og så fandt jeg i øvrigt også et eksempel hvor variablen tilsyneladende typecastes til en type (string). Men vil det betyde at jeg reelt får en string, og får jeg en int når jeg bruger (integer). Vil jeg  kunne smide tekst i en sådan integer? Mig bekendt er PHP ikke ligefrem et type-stærkt sprog :)

class UserAccounts
{
    function Test($user, $regkey)
    {
        var (string)$output;
       
        $output = "Hej $user - $regkey";
       
        echo $output;
    }
}
Avatar billede jakobdo Ekspert
11. august 2005 - 21:16 #1
class UserAccounts
{
  var $output;
  function Test($user, $regkey)
  {
    $this->output = "Hej $user - $regkey";
  }
 
  function show()
  {
    return this->output;
  }
}

så kan du lave:
<?
include("dinKlasse.php");
$minKlasse = new UserAccounts();
$minKlasse->Test("jakobdo","minReg");
echo $minKlasse->show();
?>
Avatar billede webcreator Nybegynder
11. august 2005 - 22:00 #2
Hej Jakobdo.

Mange tak for hjælpen. Det var '$this' jeg manglede :)

Hvornår bruger man 'var'? Kun når det er attributter på klassen?
Avatar billede webcreator Nybegynder
11. august 2005 - 22:02 #3
Jeg får i øvrigt fejl med 'var $output' på klassen :
Strict Standards: var: Deprecated. Please use the public/private/protected modifiers in ~\UserAccounts.php on line 32

Bruger jeg i stedet 'private $output', fungerer det fint.
Avatar billede jakobdo Ekspert
11. august 2005 - 22:02 #4
Det mener jeg ja!
Er ikke selv mester i klasser og php.
(men hvad fanden, det virker) :o)
Avatar billede webcreator Nybegynder
11. august 2005 - 22:03 #5
Men selv med 'private' foran, får jeg denne fejl :
Notice: Undefined variable: output in ~\UserAccounts.php on line 36
Avatar billede jakobdo Ekspert
11. august 2005 - 22:03 #6
Det er fordi du skal tage stilling til om variablen er private, public eller protected.
Kender du disse typer?
Avatar billede jakobdo Ekspert
11. august 2005 - 22:04 #7
Kan du evt vise din fulde kode?
Avatar billede webcreator Nybegynder
11. august 2005 - 22:05 #8
Ja, naturligvis :)

private $output;

class UserAccounts
{
    function Test()
    {
        $this->$output = "hej";
       
        echo $this->$output;
    }
}

-----------------------------------------------

require("classes/UserAccounts.php");

$userAccounts = new UserAccounts;

$userAccounts->Test();
Avatar billede webcreator Nybegynder
11. august 2005 - 22:05 #9
Hov, 'private $output;' ligger selvfølgelig på klassen. Det var en flytte-rundt-fejl.
Avatar billede webcreator Nybegynder
11. august 2005 - 22:06 #10
Sådan her :

class UserAccounts
{
    private $output;
    function Test()
    {
        $this->$output = "hej";
     
        echo $this->$output;
    }
}
Avatar billede jakobdo Ekspert
11. august 2005 - 22:08 #11
Test lige dette:

class UserAccounts
{
    private $output;
    function Test()
    {
        $this->$output = "hej";
     
        return $this->$output;
    }
}

-----------------------------------------------

require("classes/UserAccounts.php");

$userAccounts = new UserAccounts();

echo $userAccounts->Test();
Avatar billede webcreator Nybegynder
11. august 2005 - 22:08 #12
Det er forresten i nedenstående linier at fejlen opstår :

        $this->$output = "hej";
   
        echo $this->$output;
Avatar billede webcreator Nybegynder
11. august 2005 - 22:09 #13
Desværre, gjorde igen forskel.
Avatar billede jakobdo Ekspert
11. august 2005 - 22:12 #14
Sgu da klart! :o)
Ret disse linier:
$this->$output = "hej";
return $this->$output;

til:
$this->output = "hej";
return $this->output;

(jeg fjernede $ fra output.
Avatar billede webcreator Nybegynder
11. august 2005 - 22:14 #15
Yeah :)

Det lykkedes sørme. Mange tak for det :)
Ser dog en anelse skummelt ud med variabler uden $. Men sådan er det åbenbart :)
Nu mangler jeg blot at finde ud af, hvor 'var' bruges korrekt. For i virkeligheden har jeg ikke brug for at definere variabler uden for funktionerne. Det var dog rart at finde løsningen alligevel, så jeg ikke står med problemet en anden dag :)
Avatar billede webcreator Nybegynder
11. august 2005 - 22:15 #16
Ved du forresten hvornår man gør brug af type-casts? (string), (integer) etc?
Så vidt jeg kan se, har det ikke den store effekt
Avatar billede webcreator Nybegynder
11. august 2005 - 22:18 #17
Hov, og lige endnu en ting : kan det passe at man ikke kan definere variabler i functions?
Avatar billede jakobdo Ekspert
11. august 2005 - 22:18 #18
Altså man type-caster når en variabel har en anden type end det man ønsker bruge! :o)
Hvis vi f.eks. siger:
$integer = 1;
$streng = (string)$integer;
Så tvinger vi integer til at blive en streng... (sådan nogenlunde)
Avatar billede jakobdo Ekspert
11. august 2005 - 22:19 #19
Det burde du godt kunne jo!
Men prøv blot med:
$var = 1;
eller
$var2 = "Hej Mor";

Mener man brugte var i php 4 og private/public i php 5.
Avatar billede jakobdo Ekspert
11. august 2005 - 22:20 #20
Du får også lige et svar, nu hopper jeg nemlig i seng! :o)
Avatar billede webcreator Nybegynder
11. august 2005 - 22:20 #21
Yep, den er jeg med på. Men burde jeg kunne smide tekst i en variabel jeg netop har type casted til en int ? Og hvad er ideen med type casting i PHP, når sproget alligevel ikke er typestærkt ? Forsøger lige at hitte rede i det grundlæggende :)
Avatar billede webcreator Nybegynder
11. august 2005 - 22:20 #22
Ok, så må du sove godt. Tak for hjælpen :)
Avatar billede olebole Juniormester
12. august 2005 - 01:36 #23
<ole>

- der er også lidt her:
    http://dk2.php.net/oop
- og:
    http://dk2.php.net/ZEND_CHANGES_PHP_5_0_0b2.txt

/mvh
</bole>
Avatar billede jakobdo Ekspert
12. august 2005 - 07:49 #24
Takker for point!
Og om jeg sov godt, det ved jeg nu ikke.
Synes ikke jeg var helt færdig med at sove da uret ringede i morges! ;o)
Avatar billede drbean Nybegynder
12. august 2005 - 08:39 #25
Måden du kan adskille det på er templates. Der findes nogen forskellige systemer, men jeg bruger den indbygget XML funktion. (http://dk.php.net/xml)

Hvis du bruger XML metoden, kan du adskille dit PHP og HTML 100%. Man bruger PHP til at lave et XML dokument. Så bruger du XSLT til at parse det til HTML. Det tager en lille smule længere tid at kode, og en god portion tid at sætte sig ind i, men jeg har erfaret at på lidt større systemer bliver du glad for det.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester