php继承
Ⅰ 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继承一个父类,如何自动执行父类方法
你在父类写一个成员函数 然后子类继承 创建子类对象的时候 可以点出来父类的成员函数
比如
Student zs = new Student();
zs.SayHello() //点出来的是从父类的继承来的成员函数
输出结果为父类的->我是人类
publicclassPerson
{
publicvoidSayHello()//这只是父类的SayHello
{
echo"我是人类";
}
}
publicclassStudent:Person//已经继承了Person父类
{
//我什么都没写
}
Ⅲ 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类继承,方法不能继承
你的$name是私有的,无法继承,要protected才能继承
Ⅳ 在php中,子类extends继承了父类,当子类和父类同时存在构造函数__construct先执行哪一个呢
1、如果父类和子类中都没有显式的定义__construct,在实例化子类对象时,只会隐含的调用子类自己的构造方法。
2、如果父类中有显式的构造方法__construct,而子类中没有定义__construct,在实例化子类对象时,就会调用父类中的构造方法。
3、如果父类和子类中都显式的定义了__construct,在实例化子类对象时,只会调用子类自己的构造方法(这就像是子类重构了父类的构造方法),而如果也想要调用父类的构造方法的话,就需要在子类的__construct 方法中显式的调用,(如 __construct(){ parent::_construct();})。
(5)php继承扩展阅读
子类的构造函数名与子类名相同。
在子类里父类的构造函数不会自动执行。
要在子类里执行父类的构造函数,必须执行类似以下语句:
$this->[父类的构造函数名()]
类的构造函数统一命名为__construct()。
子类的构造函数名也是__construct()(也是废话)。
在子类里父类的构造函数会不会执行,分两种情况:
1、如子类不定义构造函数 __construct(),则父类的构造函数默认会被继承下来,且会自动执行。
2、如子类定义了构造函数 __construct(),因为构造函数名也是__construct(),所以子类的构造函数实际上是覆盖(override)了父类的构造函数。这时执行的是该子类的构造函数。
这时如果要在子类里执行父类的构造函数,必须执行类似以下语句:parent::__construct();
Ⅵ PHP继承的子类父类要求写在一个PHP文件吗
建议子类和父类分开写,但是写在一块也是可以的,就是有点不规范。示例如下:
<?php
//Parent.class.php【父类】
classParent{
public$name;
publicfunction__construct(){
$this->name='中国';
}
publicfunctiondoWork($parm){
echo"我的工作是:".$parm;
}
}
<?php
//Son.class.php【子类】
classSonextendsParent{
publicfunction__construct(){
parent::__constuct();
}
publicfunctiondoWork($parm){
echo"我的工作是:".$parm;
}
}
Ⅶ 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中的类是单继承,那要有多个类继承怎么办
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 继承一个类一定要引用一下吗
php有自动加载类的功能,但是需要遵循一定的规则,并且需要额外的代码支持实现。
对于你说的问题,较常见的情况是b.php里面虽然没有引用a.php,但是c.php可能引用了a.php及b.php。只要在一个php进程中保证引用了这些文件就行,引用位置是可变的。例如在第一行引用和在第二行引用没有区别,只要在new之前引用过就好了。但是明显这不是值得推荐的。
Ⅹ PHP私有属性继承问题
你设置了 private $Pname; 为私有变量 就导致了你的派生类是无法访问父类的成员可以使用 protected $Pname 这样就可以使得派生类和基类都能范围该类的成员。 ===你初始化$student=new Student('1','zhangsan','18','男','9月23');后 不用重载parent::IT(); 这样只能echo出父类的那句话。。你要的是覆盖的效果 所以直接echo "$this->Pname 的工作是学生<br>"; 就可以了