webForumDet fria alternativet

anropa metod i annan klass från klass

PHP

8 svar · 614 visningar · startad av Prime_66

Medlem sedan aug. 2004290 inlägg
Frågan#1

Tja, hur gör man för att anropa en metod i klass2 från klass1?
T.ex.

class Klass1{
function f1(){
//Här vill jag anropa f2
}

}

class Klass2{
function f2 ($id){
}
}

Medlem sedan mars 2003429 inlägg
#2

// Här vill jag anropa f2
$objKlass2 = new Klass2();
$objKlass2->f2($id);
// Nu har jag anropat f2

Medlem sedan aug. 2004290 inlägg
#3

Jo fast om jag vill skriva det inuti klass 1, går det? T.ex. har jag en klass för felhantering av mysql-operationer. Och inuti klass1 körs mysql-operationer, jag kan alltså inte hoppa ur klassen och skriva som du gör. Låt oss säga att jag befinner mig i en funktion i klass 1 och därifrån vill jag komma åt en metod/funktion i klass2 utan att först avsluta funktionen i klass1.

Medlem sedan juni 20031 837 inlägg
#4

antingen får du skapa en instans av klass2 där du vill använda den eller får du skapa den tidigare och skick in den som en parameter till det ställer där du vill anropa den.

class Klass1
{
  function f1($k2)
  {
    //Här vill jag anropa f2
    $k2->f2();
  }

}

class Klass2
{
  function f2 ($id)
  {
  }
}

$kl2 = new Klass2();
$kl1 = new Klass1();
kl1->f1(&$kl2);

eller skicka in den som en parameter till konstruktorn i Klass1

class Klass1
{
  var $k2;
  
  function Klass1($k2)
  {
    $this->k2 = $k2;
  }

  function f1()
  {
    //Här vill jag anropa f2
    $this->k2->f2();
  }

}

class Klass2
{
  function f2 ($id)
  {
  }
}

$kl2 = new Klass2();
$kl1 = new Klass1(&$k2);
kl1->f1();
Medlem sedan mars 2003429 inlägg
#5

Varför fungerar inte detta för dig?

<?PHP
class klass1 {
	function klass1() {
		$objKlass2 = new Klass2();
		$objKlass2->skriv();
	}
}

class klass2 {
	function klass2() {
		
	}
	
	function skriv() {
		echo "hej hej";
	}
}

new klass1();
?>

Funkar fin fint utan att ha några parametrar..

EDIT! Koden i mitt första inlägg var ju naturligt vis menat att ligga där du skrev samma kommentar som jag använde i min kod, inte att det skulle vara sepparat utanför din klass och funktion!

Sorry om jag var otydlig

Medlem sedan aug. 2004290 inlägg
#6

Duffer..jo det funkar. Men problemet då blir att jag måste skapa klassen i varje funktion som använder den, eller hur. Samt att ja få felmeddelandet "Cannot redeclare class" eftersom jag jag använder denna användarhanteringsklassen på sidor som också använder felhanteringsklassen...hmm..men det smartaste är ju att skapa den som en var i klass1 så att den kan anropas från alla funktioner.

Medlem sedan aug. 2004290 inlägg
#7

Varför kan jag inte öra så här:
include("classes/error_handling/error_handling.php");

class user_handling{
var $errors = new error_handling;
}

borde väl funka. Och sen komma åt den med $this->error_handling();

Medlem sedan juni 20031 837 inlägg
#8

det är ju ungefär samma som jag och Duffer har skrevit, du var nog lite otydlig när du förklara hur du vill ha det.

Medlem sedan aug. 2004290 inlägg
#9

Hehe..mm ja det är sant. Har nog varit lite otydlig. Men tack för hjälpen. Jag gjorde så här nu:

include("classes/error_handling/error_handling.php");

class user_handling{
var $errors;
function user_handling(){
$this->errors = new error_handling;
}

}

263 ms totalt · 4 externa anrop · v20260731065814-full.2f471f9e
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)