WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   PHP Functions (https://www.wn.se/forum/showthread.php?t=26977)

SumoSilent 2008-02-07 19:31

Hejsan hoppas ni kan hjälpa mig med detta problem.

Kod:

class testing
 {

 function getdata($testar)
 {
  if($testar == "hej")
  return $testar = "tja";
 }

 function test($testar)
 {

 $testar = getdata($testar);
 echo $testar;
 }

 }

$testing = new testing();
$testing->test("hej");

Jag får felmeddelandet att jag inte kan annropa "i detta fallet" getdata för att den inte finns men när jag tar och lägger
getdata i funktionen test så fungerar det.

Nu till den rediga frågan går det att få tag på denna function på ett annat sätt? eller ska jag göra på något annat sätt?

(Skriptet är alltså inte det äkta) :rolleyes:

HenSod 2008-02-07 19:49

Kod:

class testing
{

 function getdata($testar)
 {
 if($testar == "hej")
 return $testar = "tja";
 }

 function test($testar)
 {

 $testar = $this->getdata($testar);
 echo $testar;
 }

}

$testing = new testing();
$testing->test("hej");

Observera hur jag använder $this i metoden test för att referera till klassmetoden getdata.

SumoSilent 2008-02-07 19:55

Tack så hemst mycket men nu är det så att jag har en class till innanför testing. Hur ska jag skriva annropet för att komma åt den?

HenSod 2008-02-07 20:12

Du får skapa en instans av klassen sedan använder du objekt->metod().

oddholst 2008-02-07 20:16

Citat:

Originally posted by SumoSilent@Feb 7 2008, 20:55
Tack så hemst mycket men nu är det så att jag har en class till innanför testing. Hur ska jag skriva annropet för att komma åt den?

Du får skapa en instans till den andra klassen och anropa funktionen i denna på samma sätt, dvs med $this->funktionen().

Ex

Kod:

class cl1
{
 function konstigfunktion()
 {
 return "Tjohoo";
 }
}


class cl2
{
 function annanfunktion()
 {
 $dummy = new cl1();
 return $dummy->konstigfunktion();
 }
}

$testing = new cl2();
echo $testing->annanfunktion();

Ger "Tjohoo".

SumoSilent 2008-02-07 20:21

Tanken är ju då att jag har det så här:

Class 1
{

Class 2
{
Function test($testar)
{
echo $testar;
}
}

}

HenSod 2008-02-07 20:44

Tveksam
Du kan inte skapa en klass i en annan klass.

oddholst 2008-02-07 21:02

En parantes:
Kan man, i mitt exempel ovan, istället använda dubbelkolon (::) för att komma åt en annan klass innehåll?

Kod:

class cl1
{
function konstigfunktion()
{
 return "Tjohoo";
}
}


class cl2
{
function annanfunktion()
{
 // Kan man göra så här?
 return cl1::konstigfunktion();
}
}

$testing = new cl2();
echo $testing->annanfunktion();

F ö så tror jag inte att man kan skapa en klass i en annan klass. I såfall får du nog utöka en befintlig klass istället (class EnKlass extends AnnanKlass).

Kan du ge exempel på varför du vill göra som du frågade om?

Hjalle 2008-02-07 21:36

Det går att använda dubbelkolon för att anropa en annan klass om det var det som var din fråga

fredrikf 2008-02-15 15:55

Syntaxen Klassnamn::metod() används för att anropa en klasmetod statiskt, dvs utan att först instansiera ett objekt av klassen.

I övrigt så är det som HenSod säger, lokala klassdefinitioner finns inte i PHP.
Känns spontant inte som något man behöver varje dag om man strukturerar sin kod hyggligt.


Alla tider är GMT +2. Klockan är nu 19:48.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson