Smarty を使用し、キャッシュ フォルダーとテンプレート フォルダーを再定義するため、エントリ ファイルに次のように記述しました:
$tpl->template_dir="./tpl/";
$tpl->compile_dir=". /com/ ";
しかし、smarty.class.php では、これら 2 つの属性は、
private $template_dir = array('./templates/');
/**
* コンパイル ディレクトリ
*
* @var 文字列
*/
private $compile_dir = ' のようにプライベートです。 ./templates_c/';
通常、プライベート属性なのでエントリファイル内での再割り当ては許可されていませんが、ここで何か別のメカニズムが許可されました。機能しません
えー...smarty.class.php で見たのは、private ではなく var です
マジック メソッド __set がクラスで使用されているかどうかを確認してくださいクラスはどうですか
ええと...smarty.class.php で見たのは、private ではなく var です
でマジックメソッドが使用されているかどうかを確認してください。 class_ _set など
すごいです
あなたが持っている Smarty のバージョンは分かりませんが、この属性はプライベートなので、いつも少し間違っています
クラスを派生させたい場合は、多くの問題に遭遇するでしょう
私が持っている 3.1は保護モードです
// 访问私有属性是通过这个方法获得的,你可以查一下文件里面的__get , __set; 而且我看到文件里面是protected而不是private/** * <<magic>> Generic getter. * * Calls the appropriate getter function. * Issues an E_USER_NOTICE if no valid getter is found. * * @param string $name property name * @return mixed */ public function __get($name) { $allowed = array( 'template_dir' => 'getTemplateDir', 'config_dir' => 'getConfigDir', 'plugins_dir' => 'getPluginsDir', 'compile_dir' => 'getCompileDir', 'cache_dir' => 'getCacheDir', ); if (isset($allowed[$name])) { return $this->{$allowed[$name]}(); } else { trigger_error('Undefined property: '. get_class($this) .'::$'. $name, E_USER_NOTICE); } }
protected $template_dir = null;を定義する魔法の方法があります