当不在对象上下文中时使用$ this进入同一个类

时间:2015-07-09 06:09:10

标签: php class static

我正在尝试为Smarty模板构建一个View类,这样我就可以调用Laravel中的模板View::make('template');

但是,我第一次收到这个错误。我找到了很多解决这个问题的答案,但我无法解决这个问题。我不知道为什么所以我开始有点厌倦了......呵呵呵呵

这是班级:

class View {

public $engine;
protected $tmpl_folder = 'tmpl';
protected $tmpl_compiled = 'tmpl_c';
protected $cache = true;
protected $force = true;

function __construct() {
    $this->engine = new Smarty();
    $this->engine->compile_check = $this->cache;
    $this->engine->force_compile = $this->force;
    $this->engine->template_dir = './' . $this->tmpl_folder . '/';
    $this->engine->compile_dir = './' . $this->tmpl_compiled;
}

static function make($t, $args = '') {
    if(!empty($args))
        $this->engine->assing($args);

    $this->engine->display($t.'.tpl');
    exit();
}}

错误是在方法make()line <b>$this->engine->assing($args)</b>中启动。

  • 我试图将$ engine变量的声明更改为public,private,protected和static ... nothing ...
  • 我声明make()像public,public static,就像上面的例子一样,没有“静态”......没什么......
  • 我试图更改$ this-&gt;为自己:: ......没什么......

我不知道还能做什么!请一些建议!

1 个答案:

答案 0 :(得分:0)

让这个工作快速将View类实例化为这样的对象:

mMapFragment = MapFragment.newInstance();
    FragmentTransaction fragmentTransaction =
            getFragmentManager().beginTransaction();
    fragmentTransaction.add(R.id.map, mMapFragment);
    fragmentTransaction.commit();

然后按照以下方式调用$obj_view = new View(); 方法:

make()

我还要声明你的方法(函数)的范围(它们都应该是$obj_view->make('template'); ) - 你是为属性(变量)做的,所以为什么不对这些方法也这样做并删除{{来自public

的1}}

为什么要在static中拨打make()?我希望这是用于调试('Dead programs tell no lies')

exit()让我大笑,这是一个很棒的错字! :)

提示:避免在代码中使用错误的语言(在变量名,注释或调试中)这些语言可由其他开发人员查看,并且可能无意中泄露给最终用户 - 它不专业!