我正在用 PHP 制作一个框架。我一直在努力寻找一种简单的方法,可以在其他类中使用其他对象。制作全局变量或使用__construct
's 参数对我来说不是可行的选择。
我准确地编写了我梦想的代码。通过使用 awesome__autoload
功能,本系统的工作方式如下:
class Index extends Core
{
public $house = "what a pretty house";
public function tester()
{
$this->view->get();
// Creating the property view with __get and accessing the class with the help of __autoloading.
}
}
虽然这很完美,但在创建属性时它不起作用......
$this->house = "Not so pretty"; // Still prints the original value
这是核心功能,通过它一切工作
class Core
{
function __get($property_name)
{
$include_directories = array("library", "view", "action", "errors", "template");
if(!property_exists(__CLASS__, $property_name))
{
foreach($include_directories as $include_directory)
{
$path = $this->appRoot() . $include_directory . "/" . $property_name . ".php";
if(file_exists($path))
{
return new $property_name;
break; // exit the loop when the porperty if found
}
else
{
echo "CORE__GET:PROPERTY_NOT_MADE;</BR>";
}
}
}
}
function __set($property_name, $property_value)
{
// What should I put here?
}
public function appRoot()
{
return $_SERVER['DOCUMENT_ROOT'] . "/application/";
}
}
这是 __autoload 函数...
function __autoload($class_name)
{
$include_directories = array("library", "view", "action", "errors", "template");
foreach($include_directories as $include_directory)
{
$path = $_SERVER['DOCUMENT_ROOT'] . "/application/" . $include_directory . "/" . $class_name . ".php";
if(file_exists($path))
{
include($path);
}
}
}
我喜欢我的新系统,因为它完全按照我的需要工作。但是,我很想探索做类似事情的新方法。
我希望我能克服这个问题,它在我的工作中阻碍了我。先感谢您