Avatar billede ttc Nybegynder
02. oktober 2003 - 15:18 Der er 30 kommentarer og
1 løsning

class i php : hvrofor virker det her ikke

her den sidste tid har jeg rodet lidt med classer i php

men er løbet ind i et lille problem....

jeg vil gerne oprette et objekt af en class i en anden class. men den komme ude men fejl.

jeg har lavet et lille eksemple på problemmet.

<?
class foo {
   
function foo (){
       
}
       
    function output(){
        $e = "foo";
        return $e;
    }
}
   
class bar{
   
    var $foobar;

    function bar(){
        $this->foobar = new foo();
    }
       
    function output_foo(){
        $this->foobar->output();
    }
}
$z = new bar();
print ($z->out());
?>
Avatar billede erikjacobsen Ekspert
02. oktober 2003 - 15:23 #1
<?
class foo {

function foo (){

}

    function output(){
        $e = "foo";
        return $e;
    }
}

class bar{

    var $foobar;

    function bar(){
        $this->foobar = new foo();
    }

    function output_foo(){
        return $this->foobar->output();
    }
}
$z = new bar();
print $z->output_foo();
?>
Avatar billede ttc Nybegynder
02. oktober 2003 - 15:31 #2
ja ok, jeg kan se at jeg ikke fik skrevet mit script helt rigtige. dog vil det ikke hjælpe efter som at den vil komme med følgene fejl

Fatal error: Call to undefined function: out() in /home/wwwroot/foobar.php on line 27
Avatar billede detox Nybegynder
02. oktober 2003 - 15:36 #3
Hvis du insisterer på at kalde out(), skal du gøre sådan:

<?
class foo {

function foo (){

}

    function output(){
        $e = "foo";
        return $e;
    }
}

class bar{

    var $foobar;

    function bar(){
        $this->foobar = new foo();
    }

    function out(){
        return $this->foobar->output();
    }
}
$z = new bar();
print $z->out();
?>
Avatar billede ttc Nybegynder
02. oktober 2003 - 15:43 #4
detox>> det er oxo helt rigtige men så falder ide men at oprette objekte.... skulle jo gerne kunne arbejde med retur værdien....

<?
class foo {

function foo (){

}

    function output(){
        $e = "foo";
        return $e;
    }
}

class bar{

    var $foobar;

    function bar(){
        $this->foobar = new foo();
    }

    function output_foo(){

        $m = "db".$this->foobar->output();
        return $m;
    }
}
$z = new bar();
print $z->output_foo();
?>
Avatar billede detox Nybegynder
02. oktober 2003 - 15:52 #5
Jamen det kan du da osse, du kan jo fx:

$z = new bar();
$minvar = $z->output_foo();
Avatar billede erikjacobsen Ekspert
02. oktober 2003 - 18:39 #6
Jeg forstår heller ikke helt hvori problemet består.

En objekt af typen bar() kan jo ikke funktioner fra objektet foo() - i hvert
fald som du skriver det.
Avatar billede ttc Nybegynder
02. oktober 2003 - 20:35 #7
hmmm. det er måske også bare mig der ikke forklare mig godt nok. det jeg vil er at. kunne oprette og styre et eller flere objekter en den samme class.

man kan godt gøre det hvis holder det inde for den samme function som objekte er oprettede i, det jeg prøver at finde ude af er om man kan gøre det over flere functioner.
Avatar billede erikjacobsen Ekspert
02. oktober 2003 - 21:06 #8
En funktion er knyttet til en klasse. Som du kan se. Du har det lille
"work-around" at lave en funktion i en klasse, der kalder en funktion
i en anden klasse. Der er ikke så meget andet at gøre.

Det du siger minder ikke om nedarvning --- eller gør det ?
Avatar billede ttc Nybegynder
02. oktober 2003 - 21:30 #9
nope det er ikke nedarvning vi snakker. nedarvning går også under betegnelsen "er en". det jeg vil kan mere betegnes som "har en". dvs en class der består af en eller flere objekter af ander classer.

man kan godt oprette objekte og arbejde med det i samme function, det jeg ikke kan finde ude af er om det er muligt at oprette objekte i en function og arbejdte med den i en anden function.
Avatar billede erikjacobsen Ekspert
02. oktober 2003 - 21:33 #10
det kan man ikke. Og hvordan skulle man. To klasser kan have samme navn
på en funktion. Hvis du har en instans af hver i en tredie klasse, hvilken
skulle da vælges hvis man kunne? Det du siger giver reelt ingen mening.
Avatar billede ttc Nybegynder
02. oktober 2003 - 21:42 #11
hmmm, har ikke et script her der nærmer kan vise hvad det er jeg tænker på men vil poste det i morgen..... så håber jeg at det giver mere mennigen....
Avatar billede erikjacobsen Ekspert
02. oktober 2003 - 21:43 #12
Det glæder jeg mig til. Hvis det ligner almindelig objektorienteret
tankagang, så kan man også i PHP4 (så nogenlunde, men bedre i PHP5)
Avatar billede ttc Nybegynder
03. oktober 2003 - 09:19 #13
jeg har lagt filerne til det projekt jeg arbejder med ude på en webserver

http://217.157.229.76/projekt/bruger.cls.txt
http://217.157.229.76/projekt/bruger.txt
http://217.157.229.76/projekt/sql.cls.txt

håber det giver ledt mere menninge
Avatar billede erikjacobsen Ekspert
03. oktober 2003 - 10:39 #14
Er dit problem så noget med
  //var $MySiteDB;
??
Avatar billede ttc Nybegynder
03. oktober 2003 - 10:46 #15
jep. istæden for at oprette objekte 2 gang. vil jeg gerne kunne oprette den en gang
Avatar billede erikjacobsen Ekspert
03. oktober 2003 - 11:13 #16
Det kan du også. Eksemplet fra min første kommentar viser jo at objektet
vi kalder $foobar eller $this->foobar overlever som du ønsker.
Avatar billede ttc Nybegynder
03. oktober 2003 - 11:39 #17
ja det kan jeg....

prøvet så om jeg kunne få det til at virke i det projekt jeg koder på og der ville den stadig ikke gøre det.....
Avatar billede erikjacobsen Ekspert
03. oktober 2003 - 11:42 #18
;) Øh, så må du jo gøre et eller andet forkert ... *g*
Avatar billede ttc Nybegynder
03. oktober 2003 - 12:20 #19
jeg har fundet ude af hvor fejlen opstår

så længe at jeg kun retuner output kan jeg godt gøre det, men lige så snart jeg prøver at ænder på output fejler den.....

prøv at kigge lidt på kommentar fra mig kl 15:43 i går
Avatar billede erikjacobsen Ekspert
03. oktober 2003 - 13:19 #20
Hvad er det der går galt i det script?
Avatar billede ttc Nybegynder
03. oktober 2003 - 13:22 #21
den kommer med fejlen Fatal error: Call to undefined function: output();
Avatar billede erikjacobsen Ekspert
03. oktober 2003 - 13:28 #22
Nej - hos mig skriver den
dbfoo
som den skal.
Avatar billede ttc Nybegynder
03. oktober 2003 - 13:34 #23
hmmm.... ved ikke lige hvorfor den virker
for gøre jeg det samme i mit projekt fejler den.....
Avatar billede erikjacobsen Ekspert
03. oktober 2003 - 13:47 #24
Vis os koden, hvis du vil have fundet fejlen.
Avatar billede ttc Nybegynder
03. oktober 2003 - 13:49 #25
det er den kode jeg har smidt 9:19 i dag
Avatar billede erikjacobsen Ekspert
03. oktober 2003 - 14:00 #26
Ok - men hvis det fx er bruger.cls.txt og du ønsker at bruge  $MySiteDB  skal
du jo hele tiden skrive $this->MySiteDB
Avatar billede ttc Nybegynder
03. oktober 2003 - 14:10 #27
ja eller parent::MySiteDB hvilket jeg gøre du....

har dog fundt fejlen i mit script

når jeg opretter et objekt af classen Current_Users bliver kun dens egen constuter køre, constuter for Users bliver ikke kørt...

dette klaret dog ved at insætte koden parent::User i Current_User's egen constuter....
Avatar billede erikjacobsen Ekspert
03. oktober 2003 - 14:13 #28
Det er nemlig korrekt: http://www.php.net/manual/en/language.oop.constructor.php

"Caution

Neither PHP 3 nor PHP 4 call constructors of the base class automatically from a constructor of a derived class. It is your responsibility to propagate the call to constructors upstream where appropriate. "
Avatar billede ttc Nybegynder
03. oktober 2003 - 14:23 #29
det er nu jeg har lyst til at sige DOH!!!

du er den første der har kunne fortælle mig at det var det der er problemet. kan du ikke smide et svar......

NB.... hvorfor er det lige at jeg ikke har dig på min ICQ
Avatar billede erikjacobsen Ekspert
03. oktober 2003 - 14:33 #30
Var det det egentlige problem, så har du jo selv fundet det. Jeg frafalder point.

(Hjælp uden for eksperten.dk er skam mulig ... rent principielt ... men det er ikke gratis *g*)
Avatar billede ttc Nybegynder
03. oktober 2003 - 14:41 #31
jeg takker og bukker..

hjælp mangler jeg altid men der er nu mere til at kode projekter. det sker at jeg tit har brug for en makker. da jeg gerne køre del projekter og ikke altid har nok tid til at nå det hele.. men igen der er der jo mange der gøre...
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