PHP クラスでの Smarty の参照に関連する問題はありますか?

WBOY
リリース: 2016-06-13 13:40:39
オリジナル
986 人が閲覧しました

PHP クラスでの Smarty の参照の問題???
問題の概要:
クラスで Smarty メソッドを呼び出したいのですが、次のエラーが発生します:
PHP 致命的なエラー: そうでない場合に $this を使用しますG のオブジェクト コンテキスト内: SVNYCMSlocalhostcoresmartyssyspluginssmarty_internal_data.php 38 行目
以下のコードを投稿してください。助けていただければ幸いです [app/model/home.php は他のページを通じて _Model クラスを導入しています]:
app/model /home.php

PHP コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
<?php
/**
 * Name: app-model-home
 * Author: yinhexi
 */
if(!defined('IN_MODEL')) die('Access Violation Error:app-model-home!');

class home extends _Model {
    
    public static function index() {
        parent::assign('title', 'YCMS');
    }
        
}

?>

ログイン後にコピー

core/model/index.php
PHP コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
<?php
/**
 * Name: core-model-index
 * Author: yinhexi
 */
define('IN_MODEL', 1);
include_once(Y_CORE.DS.'config'.DS.'smarty.php'); //引入smarty类

class _Model extends Smarty {
    
    public function __construct() {
        
    }
    
    //检测相关类中是否存在对应方法
    protected function instance($c_f,$c_c_m) {
        if(!in_array($c_f,get_class_methods($c_c_m))) {
            die("Model: Class $c_c_m does not exist in Method $c_f!");
        }
    }
        
}


?>

ログイン後にコピー

core/config/smarty
PHP コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
<?php
/**
 * Name: core-config-smarty
 * Author: yinhexi
 */
if(!defined('IN_CORE')) die('Access Violation Error:core-config-smarty!');

include_once(Y_CORE.DS.'smarty'.DS.'Smarty.class.php');

$smarty = new Smarty();
$smarty->template_dir = Y_APP.DS.'view';//设置模版目录
$smarty->compile_dir = Y_CACHE.DS."view_c";//设置编译目录
$smarty->config_dir = Y_APP.DS.'config'.DS.'smarty';//配置目录变量
//$smarty->php_handling = SMARTY_PHP_ALLOW; //不赞成设置为SMARTY_PHP_ALLOW
$smarty->left_delimiter = "{";
$smarty->right_delimiter = "}";

//compile
#$smarty->compile_check = false;//编译检查变量

//Cache
$smarty->caching = true; //缓存模版的输出
$smarty->cache_dir = Y_CACHE; //存放模版缓存的目录名
#$smarty->cache_lifetime = 1; //缓存生命周期
?>

ログイン後にコピー

ファイルの関連付けには問題ありませんが、一部はここに表示されません。

指摘されたエラーは、smarty のソース コードであり、ここにも掲載されています:
PHP コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
 public function assign($tpl_var, $value = null, $nocache = false)
    {
        if (is_array($tpl_var)) {
            foreach ($tpl_var as $_key => $_val) {
                if ($_key != '') {
                    $this->tpl_vars[$_key] = new Smarty_variable($_val, $nocache);
                }
            }
        } else {
            if ($tpl_var != '') {
                $this->tpl_vars[$tpl_var] = new Smarty_variable($value, $nocache);
            }
        }
    }

ログイン後にコピー


アドバイスをいただければ幸いです!

-----解決策---------
assign は、参照する前にインスタンス化する必要があります。クラス ホーム、parent::assign() に、親クラスがまったくインスタンス化されていない文があります
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート