PHP我怎样才能在课堂内使用$ this-> app?

时间:2015-03-27 08:10:19

标签: php

这些天我正在学习PHP。对不起,如果我的下面的查询看起来很蠢。

 <?php
class A
{
   var $parent;
   var $app;

   function A($parent) {

      $this->parent = $parent;

      if ($parent->isApplication()) {
         $this->app = $parent;
      } else {
         $this->app = $parent->getApplication();
      }
   }


}
?>



<?php
class B extends A

{
    private $app;
    private $cfg;

    public B() {
        $this->app = parent::$app;
        $this->cfg = $this->app->cfg;
    }


}
?>


<?php

class C extends A {

function x(){     新B($ this); //在某个地方打电话     }     }

?>

如何在子类'B'中使用$this,我知道我可以在某个函数中使用$ this,但我的目的是在该php文件中使用$ app,所以我试图创建$ app只是在类中,所以我可以在任何地方使用这个$ app变量,否则我会在某个函数中使用$ this。

以下是我的问题: 我怎样才能在课堂上使用$this->app


更新

  <?php
class A
{
   var $parent;
   var $app;

   function Canvas($parent) {

      $this->parent = $parent;

      if ($parent->isApplication()) {
         $this->app = $parent;
      } else {
         $this->app = $parent->getApplication();
      }
   }


}
?>


<?php
class B extends A

{
    private $app;
    private $cfg;

    public Canvas_Access_Approval() {
        $this->app = parent::$app;
        $this->cfg = $this->app->cfg;
    }


}
?>


<?php

class C extends A {

    function x(){
       new B($this);
    }
}

?>

获取错误: PHP解析错误:语法错误,意外“B”(T_STRING),期望变量(T_VARIABLE)

3 个答案:

答案 0 :(得分:0)

您正在扩展A类,因此您将收到此父级的所有公共/受保护属性。这意味着:

class A {
    public $app = 'test';
}

class B extends A {
    public function get() {
        echo $this->app;
    }
}

new B; // test

或(但不必要):

class B extends A {
    private $bApp;

    public function __construct() {
        echo $this->bApp = $this->app;
    }
}

答案 1 :(得分:0)

类属性的默认值必须是文字,它不能引用任何变量或调用函数。如果要计算属性的默认值,则必须在构造函数方法中执行此操作:

class B extends A {
    private $app;
    private $cfg;

    public function __construct() {
        $this->app = parent::$app;
        $this->cfg = $this->app->cfg;
    }
}

请注意,您无法像$app$cfg那样访问类属性,它们始终必须使用$this->进行限定(当引用类中当前对象的属性时) )。

$app中声明B并不是很重要,因为它会自动从A继承$this->app,因此您只需将{{1}}作为{{1}}访问,而无需另外声明

答案 2 :(得分:0)

你必须在A中声明$ app protected,然后它将对类和所有子类可见,但不在类之外。

class A {
    protected $app;
}

class B extends A {
    public function demo() {
        $cfg = $this->app->config;
    }
}