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