Anropa klass via sträng

PHP

4 svar · 581 visningar · startad av learn

Medlem sedan jan. 20051 130 inlägg
Trådstart#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??

Medlem 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

Medlem 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...

Medlem 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.

Medlem 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?

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