‘壹’ 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(); 就是执行父类的构造方法。
这么做是因为子类中写了构造方法会覆盖父类的构造方法导致父类的构造方法不能自动执行,所以在子类中的构造方法中手动执行父类的构造方法。