PHP 我怎样才能在课堂上使用$this->应用程序


PHP How can I able to use $this->app just inside class?

这些天我在学习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 {

函数 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(

您正在扩展类 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;
    }
}

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

class B extends A {
    private $app;
    private $cfg;
    public function __construct() {
        $this->app = parent::$app;
        $this->cfg = $this->app->cfg;
    }
}

请注意,您不能简单地$app$cfg访问类属性,它们始终必须使用 $this-> 进行限定(当引用类中当前对象的属性时(。

B 中声明 $app 并没有多大意义,因为它会自动从 A 继承它,因此您可以$this->app访问它而无需额外的声明。

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

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