Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP我怎样才能在类中使用$this->app?_Php - Fatal编程技术网

PHP我怎样才能在类中使用$this->app?

PHP我怎样才能在类中使用$this->app?,php,Php,这些天我在学习PHP。抱歉,如果我下面的查询看起来很愚蠢 <?php class A { var $parent; var $app; function A($parent) { $this->parent = $parent; if ($parent->isApplication()) { $this->app = $parent; } else { $this->a

这些天我在学习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 {
如何在子类“B”中使用$this,我知道我可以在某个函数中使用$this,但我的意图是在php文件中的任何地方都使用$app,所以我尝试在类中创建$app,以便我可以在任何地方使用$app变量,否则我会在某个函数中使用$this

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

更新:


获取错误为:PHP Parse Error:syntax Error,意外的'B'T_字符串,应为变量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->进行限定

class A {
    protected $app;
}

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

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

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

class A {
    protected $app;
}

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

请理解我的疑问。。我知道我可以在某些函数中使用$this->app,但我需要在类中获得$app值,我如何才能获得它?我需要$app在php文件中的任何地方使用。我明白,我想给你一个线索。。PHP告诉您,您不能在属性声明中使用$this,所以您必须用另一种方法来实现。如果您可以在方法中使用$this,那么您可以将类B的属性设置为类a的属性,但为什么呢?我会将类a中的$app设置为“受保护”。我想在php文件中的任何地方都使用$cfg,那么如何实现它呢?我的意思是,我不想使用$cfg=$this->app->config;在每个函数中。在php文件中,您指的是对象的内部?从父类继承属性时,请直接使用它们。正如我所悲伤的-你可以访问父类的公共和受保护的属性。因为B扩展了A,它自动继承了A的所有属性,你不需要在B中声明新的$app属性。顺便说一句,你不应该使用过时的var声明,在A中使用public$app。错误发生在哪一行?您不使用public B创建构造函数,而是使用public\uu构造创建它。这不是C。我想在php文件中的任何地方都使用$cfg,那么如何实现它呢?我的意思是,我不想使用$cfg=$this->app->config;在每个函数中。我将在类A中创建$app作为“受保护”。我想在php文件中的任何地方都使用$cfg,那么如何实现它呢?我的意思是,我不想使用$cfg=$this->app->config;在每个函数中。你不能作为普通变量访问类属性,这不是PHP的工作方式。在构造函数中进行初始化后,你必须以$this->cfg的形式访问它。我尝试使用构造函数B,并在构造函数中使用$app=$this->app,但是没有得到$app值。如果你真的想要全局变量,为什么要使用OOP?OOP的整体思想是避免大量全局变量。
class A {
    protected $app;
}

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