ホームページ  >  記事  >  バックエンド開発  >  不可解な私有地

不可解な私有地

WBOY
WBOYオリジナル
2016-06-23 13:32:48971ブラウズ

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 です


私は Smarty-3.1.24 を使用しています

でマジックメソッドが使用されているかどうかを確認してください。 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;
を定義する魔法の方法があります

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。