Ⅰ php私有属性继承问题
你设置了 private $Pname; 为私有变量 就导致了你的派生类是无法访问父类的成员可以使用 protected $Pname 这样就可以使得派生类和基类都能范围该类的成员。 ===你初始化$student=new Student('1','zhangsan','18','男','9月23');后 不用重载parent::IT(); 这样只能echo出父类的那句话。。你要的是覆盖的效果 所以直接echo "$this->Pname 的工作是学生<br>"; 就可以了
Ⅱ PHP中类的继承是有什么用处哪位有案例分析一下谢谢
我们可以写一些公共类,让其他类继承,
比如程序中经常会用到的一些逻辑或算法或公共方法
将他们包进类里面,可以提升程序的效率,减少代码的重复
Common.class.php
<?php
/**
*公共处理类
*/
classCommon{
protected$DB;
publicfunction__construct(){
session_start();
$this->DB=mysql_connect('localhost','root','')ordie('Couldnotconnecttoserver');
mysql_select_db('wordpress',$this->DB)ordie('Couldnotselectdatabase');
}
?>
Register.class.php
<?php
requireClASSPATH.'Common.class.php';
classRegisterextendsCommon{
}
望采纳 Thx
Ⅲ php中静态类的继承
楼主这个问题跟静态没有多大关系,主要是继承的概念没有搞清楚,继承一个类是将子类拥有了调用父类的方法和属性的权利,并不是说将父类的方法复制到了子类中self方法相当于当前类的指针,你那样调用相当于写了
public static function test() {
parent::who();
}
这样的代码,所以才会出现那样的结果
Ⅳ 细说php 抽象类能不能被继承 php
当然可以。
它的作用就是规定好方法,让别人继承来实现方法,这是一种代码管理手段。
抽象类的方法,没有方法体,继承该抽象类的类必须实现所有抽象类定义的类。
Ⅳ PHP继承机制和JS的继承机制有什么不同
类式继承就像java的继承一样,思想也比较简单:在子类型构造函数的内部调用超类型构造函数。
原型式继承是借助已有的对象创建新的对象,将子类的原型指向父类,就相当于加入了父类这条原型链
而你的 下面这段代码不是严格意义上的类式继承,按照Nicholas C.Zakas的说法,这个应该叫做组合式继承。它调用了两次parent2()。第一次是 child2.prototype=new parent2('param'); child2就会得到两个属性param,getParam(),他们都是parent2的属性,但是他们在child2的原型中。第二次是parent2.call(this,cparam); 这次又在新对象上创建了实例属性param,getParam()。于是,这两个属性就屏蔽了原型中的两个同名属性。这有什么好处呢,就是你在构建一个child3时也继承parent2()的属性,还可以定义自己的属性。与此同时他长的就和他兄弟不同了,但又有一样的“血统(使用父类的方法)”。
Ⅵ php中的类是单继承,那要有多个类继承怎么办
PHP没有多继承的特性。即使是一门支持多继承的编程语言,我们也很少会使用这个特性。在大多数人看来,多继承不是一种好的设计方法。想要给某个类添加额外的特性,不一定要使用继承。这里我提供一种模拟多继承的方法以供参考。
PHP有一个魔术方法,叫做__call。当你调用一个不存在的方法时,这个方法会被自动调用。这时,我们就有机会将调用重定向到一个存在的方法。继承多个父类的子类,寻找方法的过程一般是这样的:
本身的方法 -> 父类1的方法 -> 父类2的方法...
模拟过程大致是这样:将各个父类实例化,然后作为子类的属性。这些父类提供一些公有的方法。当子类拥有某方法时,__call()函数不会被调用。这相当于“覆盖”了父类的方法。当调用了不存在的方法时,通过__call()方法依次从父类中寻找可以调用的方法。虽然这不是完备的多继承,但可以帮助我们解决问题。
<?php
classParent1{
functionmethod1(){}
functionmethod2(){}
}
classParent2{
functionmethod3(){}
functionmethod4(){}
}
classChild{
protected$_parents=array();
publicfunctionChild(array$parents=array()){
$_parents=$parents;
}
publicfunction__call($method,$args){
//从“父类"中查找方法
foreach($this->_parentsas$p){
if(is_callable(array($p,$method))){
returncall_user_func_array(array($p,$method),$args);
}
}
//恢复默认的行为,会引发一个方法不存在的致命错误
returncall_user_func_array(array($this,$method),$args);
}
}
$obj=newChild(array(newParent1(),newParent2()));
$obj->method1();
$obj->method3();
这里没有涉及属性的继承,但实现起来并不困难。可以通过__set()和__get()魔术方法来模拟属性的继承。请你动手实践。
Ⅶ php 继承父类 怎么调用父类的方法
直接
$this->parent_function($parameter)
或者
parent::parent_function($parameter)
Ⅷ php继承问题
这个问题有意思 .
我觉得大家可能没明白楼主的意思,private 不能被继承,这个我想没什么争议。
楼主在 A 中定义了一个 private 和 protect ,B 继承 A ,但为空类,按理说 A 中的 private $priv 不会被 B 继承,但为何在创建对象 $b = new B("b_1", "b_2"); $priv 却能被赋值并且在后面有输出?按理说 B 类中不应该有 $priv 啊?就算函数被重载了,但哪来的 $priv 变量呢?如果说是引用了父类中的 $priv ,那为何不见 parent::$priv 这样的形式呢?
Ⅸ php如何通过子类继承父类共有方法访问父类私有属性
在父类中加个public方法,
如private $aaa = 'test';
public function getAAA(){
return $this->aaa;
}
在子类中调用parent::getAAA();就可以获得父类私有属性
当然如果你想获取多个,可以改成动态变量名,
getAAA($v){
return $this->{$v};
}
Ⅹ php类继承,方法不能继承
你的$name是私有的,无法继承,要protected才能继承