PHPでフレームワークを作っています。他のクラスで他のオブジェクトを使用できる簡単な方法を作るのに苦労していました。グローバルを作成したり、__construct
のパラメーターを使用したりすることは、私にとって実行可能なオプションではありませんでした。
私は自分が夢見ていたものを正確にコーディングしました。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);
}
}
}
新しいシステムが気に入っています。私が必要としているとおりに機能するからです。ただし、同様のことを行うための新しい方法を模索したいと思っています。
この問題を克服できることを願っています。それが私の仕事を妨げています。前もって感謝します