0

我正在用 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);
        }
    }
}

我喜欢我的新系统,因为它完全按照我的需要工作。但是,我很想探索做类似事情的新方法。

我希望我能克服这个问题,它在我的工作中阻碍了我。先感谢您

4

0 回答 0