[英]String containing function-line. How to echo in other file?
$str = "$obj = new class(); $obj->getSomeFunction();"
這可能嗎? 我正在嘗試開發一個非常動態的平台,以使我的網站脫穎而出。
無論如何要讓這個工作? 來自“echo $ str;”的字符串 它會使對象運行嗎?
不要將對象作為字符串傳遞,而只需創建對象的新實例。 一旦你包含了一個文件..所有變量,對象等都存在於包含該文件的文件中。
編輯:
您可以動態創建類,而不是將類作為字符串傳遞:
<?php
class cc {
function __construct() {
echo 'hi!';
}
}
$type = 'cc';
$obj = new $type; // outputs "hi!"
?>
或者,您可以使用靜態類:
<?php
class Foo {
public static function aStaticMethod() {
echo 'hi!';
}
}
Foo::aStaticMethod(); // outputs "hi!"
// or:
$classname = 'Foo';
$classname::aStaticMethod(); // outputs "hi!"
?>
在PHP中,當您調用include()
或require()
時,將執行包含的文件。 它們遵循變量范圍規則 ,甚至允許您返回結果,就好像include是這樣的函數:
dynamicPlatform.php
<?php
$object = include('createObjAndDoStuff.php');
?>
createObjAndDoStuff.php
<?php
$obj = new class();
$obj->getSomeFunction();
return $obj;
?>
正如@zerkms指出的那樣,你可能應該使用工廠 。
class Factory {
public static function someclass() {
include_once('./classes/someclass.php'); //Although some discourage the use of *_once() functions
$obj = new someclass();
$obj->getSomeFunction();
return $obj;
}
}
//And to get a new class instance
$object = Singleton::someclass();
或者帶工廠的偽單身人士:
class SingletonFactory {
private static $someclass;
public static function someclass() {
if(!self::$someclass) {
include('./classes/someclass.php');
self::$someclass = new someclass();
self::$someclass->getSomeFunction();
}
return self::$someclass;
}
}
我正在編寫自己的mvc框架(作為學習項目),需要動態創建對象並調用方法。 我最終使用反射api來創建對象的新實例,然后調用該方法。 在這種情況下,我最終傳遞了一個關聯數組,該數組有兩個鍵/值對,類名和我想調用的方法。 我希望這有幫助。
$ class = $ command ['class']; $ method = $ command ['method'];
try{
$reflectorClass = new ReflectionClass($class);
$reflectedInstance = $reflectorClass->newInstance($matches);
} catch (Exception $e) {
exceptionHandler::catchException($e);
}
try {
$reflectorMethod = new ReflectionMethod($reflectedInstance, $method);
$reflectorMethod->invoke($reflectedInstance);
} catch (Exception $e) {
exceptionHandler::catchException($e);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.