webForumDet fria alternativet

Anropa klass via sträng

PHPur PHP

4 svar · 574 visningar · startad av learn

learnMedlem sedan jan. 20051 130 inlägg
#1

Jag skulle behöva använda en klass som är sparad i variabeln $klassnamn. Går det på något sätt??

Typ så här:

$klassnamn = "user";

$test = new $klassnamn("Användare");
$test -> enMetod();
.
.
.

Så enkelt är det ju tyvärr inte...

Hur kan jag göra??

pulseMedlem sedan nov. 200373 inlägg
#2

Jo det där ska fungera.


<?php 

class Test{
	function __construct($name){
		$this->name = $name;
	}
	
	public function getName(){
		return $this->name;
	}
	
}
$clazz = "Test";
$t = new $clazz("Kalle");
echo $t->getName();

?>

Men finns bättre sätt att göra det på. Kallas reflection läs här:
http://se.php.net/manual/en/language.oop5.reflection.php#language.oop5.reflection.reflectionclass

learnMedlem sedan jan. 20051 130 inlägg
#3

Okay, nice! Varför är det bättre att använda reflection? Känns ju enklare att bara göra som du skrev ovanför...

pulseMedlem sedan nov. 200373 inlägg
#4

Ska du bara skapa några klasser räcker det där. Behöver du mer flexibilitet kan du kika in reflection finns ju en hel del man kan göra där.

learnMedlem sedan jan. 20051 130 inlägg
#5

Om klassen jag vill "anropa" är abstract då...?

Så här brukar jag använda abstrakta klasser:

$result = min_klass::min_metod();

Följande fungerar ju inte:

$class_name = "min_klass";
$class_method = "min_metod";

$result = $class_name::$class_method();

Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM in...

Hur kan jag göra istället?

130 ms totalt · 3 externa anrop · v20260731065814-full.b2af184d
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)