导航:首页 > 编程语言 > php调用父类的构造方法

php调用父类的构造方法

发布时间:2023-08-24 22:58:53

‘壹’ php __construct 传参问题

$std = new student(100);//传入scores
另外student的构造函数应该这样写
function __construct($num)
{
parent::__construct('someone',24,'123445');//调用父类的构造函数完成初始化
$this->scores = $num;
}
至于父类的构造函数参数可以从student类传进瞎埋来,像这样
function __construct($name,$age,$tel,$num)
或磨早蚂者只有一个参数的话使用数睁森组传入,像这样
function __construct($arg)
{
parent::__construct($arg['name'],$arg['age'],$arg['tel']);//调用父类的构造函数完成初始化
$this->scores = $arg['num'];
}

echo $stu->name;//这句为什么打印不出来?
是$std吧?

‘贰’ php中parent::__construct()是什么意思

调用父类的构造函数:
class A {
public $name; //名字
function __construct($name){ //构造函数
$this->name = $name;
}

function test(){
echo $this->name;
}
}

//派生类
class B extends A{
function __construct(){
parent::__construct("测试"); //调用或者说继承父类的构造函数:
self::test();
}
}
$b = new B();

‘叁’ php继承一个父类,如何自动执行父类方法

你在父类写一个成员函数 然后子类继承 创建子类对象的时候 可以点出来父类的成员函数


比如

Student zs = new Student();

zs.SayHello() //点出来的是从父类的继承来的成员函数

输出结果为父类的->我是人类

publicclassPerson
{
publicvoidSayHello()//这只是父类的SayHello
{
echo"我是人类";
}
}

publicclassStudent:Person//已经继承了Person父类
{
//我什么都没写
}


‘肆’ PHP子类能否继承父类的构造方法

1. new son 这个类的时候,会先调用 基类 father 的构造函数2.基类构造函数 又调用 init(); 所以输出father3.private 只能限制son 不能直接访问father类 init,但是不能限制 基类调用 自身的private 方法

‘伍’ PHP继承的问题,调用父类的方法this指向问题。

我来说一说:


【一】…………public(仅有)属性和方法的继承…………

classa{
public$var='vara<br/>';
publicfunctionm(){
echo'funa<br/>';
}
publicfunctionrun(){
echo$this->var;
$this->m();
}
}

classbextendsa{
public$var='varb<br/>';
publicfunctionm(){
echo'funb<br/>';
}
}
$li=newb();
$li->run();
echo'<hr>';
var_mp($li);

输出:

varb
funb
————————————————————————————
object(b)[1]
public'var'=>string'varb<br/>'(length=11)

在这段代码中所表示的,是我们常见的一种继承方式,同为公有属性的$var 和公有方法m()


在这里,$var和m()都被继承并覆写,实例化过后,内存中只有一个$var实例,通过var_mp($li);我们可以看到它。



【二】…………private(私有)属性和方法的继承…………

classa{
private$var='vara<br/>';
privatefunctionm(){
echo'funa<br/>';
}
publicfunctionrun(){
echo$this->var;
$this->m();
var_mp($this);
echo'<br/><br/>';
}
}

classbextendsa{
private$var='varb<br/>';
privatefunctionm(){
echo'funb<br/>';
}
publicfunctionrun(){
echo$this->var;
$this->m();
var_mp($this);
echo'<br/><br/>';
parent::run();
}
}
$li=newb();
$li->run();
echo'<hr>';
var_mp($li);

输出:

varb
funb
object(b)[1]
private'var'=>string'varb<br/>'(length=11)
private'var'(a)=>string'vara<br/>'(length=11)
.
.
vara
funa
object(b)[1]
private'var'=>string'varb<br/>'(length=11)
private'var'(a)=>string'vara<br/>'(length=11)
.
————————————————————————————————
object(b)[1]
private'var'=>string'varb<br/>'(length=11)
private'var'(a)=>string'vara<br/>'(length=11)

这个时候,我们可以看到,在调用run方法时,首先它会调用到b类的私有属性$var 和私有方法m(),随后,又使用parent::run()调用父类的run()方法,我们可以看到,父类的run()方法调用后,它所调用的属性和方法,都是a类的两个私有属性和方法,这种形式,和你的问题一致;


而它与$this指向无关,我们可以在这里看到,两个$this都是指向b类。


而最有意思的是,在$li句柄中,我们却看到了两个属性!一个是b类的属性,一个是a类的属性,这两个属性同时存在着,那么,私有方法也自然是同时存在着。


【三】…………私有属性和方法能不能被继承…………

classa{
private$var='vara<br/>';
privatefunctionm(){
echo'funa<br/>';
}
}
classbextendsa{
publicfunctionrun(){
echo$this->var;
$this->m();
}
}
$li=newb();
$li->run();

输出:

Notice:Undefinedproperty:b::$varinE:...onLine9
Fatalerror:Calltoprivatemethoda::m()fromcontext'b'inE:...onLine10

这可以证明,私有属性和方法,无法被继承,所以,你的代码示例中所说,将a类的m()方法更改为private后,会显示aa的属性,也就可以理解明白了。

‘陆’ php中,调用父类的构造函数一定要用parent:__construct()吗用this->__construct()行吗

子类 还用调用父类的 构造函数?如果没有参数 实例化子类 就可以 了 还有 继承过来 的 肯定用parent了

‘柒’ 请问在php中parent::__construct()有什么作用

你的 CommonController 已经 继承了 Controller,
所以 parent::__construct(); 就是执行父类的构造方法。
这么做是因为子类中写了构造方法会覆盖父类的构造方法导致父类的构造方法不能自动执行,所以在子类中的构造方法中手动执行父类的构造方法。

阅读全文

与php调用父类的构造方法相关的资料

热点内容
用友通加密狗坏了 浏览:548
如何在服务器上配置外网网址 浏览:840
阿里云服务器的硬件在哪里 浏览:52
python自动注册谷歌 浏览:329
phpini验证码 浏览:824
解压后的文件怎么驱动 浏览:326
老板要程序员加班 浏览:414
泰尔pdf 浏览:311
视频转码压缩哪款软件好 浏览:647
盯盯拍记录仪下载什么app 浏览:436
新东方新概念英语pdf 浏览:696
python中如何创建菜单栏 浏览:507
中石化app那个叫什么名 浏览:706
借贷宝合集解压密码 浏览:640
python爬取网页代码 浏览:480
efs加密对微信无效 浏览:496
刘秀pdf 浏览:998
脚上长黑刺是什么app 浏览:703
算法工程师上海 浏览:390
php的循环语句怎么写 浏览:289