我相信这对你们大多数人来说都是一个愚蠢的问题。但是,我已经敲了很长时间。 来自ASP.NET / C#,我现在正在尝试使用PHP。但是整个OOrintation给了我很多时间。
我有以下代码:
<html>
<head>
</head>
<body>
<?php
echo "hello<br/>";
class clsA
{
function a_func()
{
echo "a_func() executed <br/>";
}
}
abstract class clsB
{
protected $A;
function clsB()
{
$A = new clsA();
echo "clsB constructor ended<br/>";
}
}
class clsC extends clsB
{
function try_this()
{
echo "entered try_this() function <br/>";
$this->A->a_func();
}
}
$c = new clsC();
$c->try_this();
echo "end successfuly<br/>";
?>
</body>
</html>
根据我的简单理解,此代码应该包含以下行:
您好
clsB构造函数已结束
输入了try_this()函数
执行a_func()
然而,它没有运行'a_func',我得到的只是:
您好
clsB构造函数已结束
输入了try_this()函数
有人能发现问题吗?
先谢谢。
答案 0 :(得分:9)
你的问题在于:
$A = new clsA();
在这里,您要为本地变量 clsA
分配新的$A
对象。您打算将其分配给属性 $A
:
$this->A = new clsA();
答案 1 :(得分:1)
作为第一个答案,你也可以通过这种方式将b类扩展到一个类,你可以访问C中的一个类,如下所示:
<?php
echo "hello<br/>";
class clsA{
function a_func(){
echo "a_func() executed <br/>";
}
}
abstract class clsB extends clsA{
function clsB(){
echo "clsB constructor ended<br/>";
}
}
class clsC extends clsB{
function try_this(){
echo "entered try_this() function <br/>";
self::a_func();
}
}
$c = new clsC();
$c->try_this();
echo "end successfuly<br/>";
?>