当前位置:首页 » 编程语言 » php继承

php继承

发布时间: 2022-01-11 03:20:14

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>"; 就可以了

热点内容
删数据库事件 发布:2024-11-15 12:10:54 浏览:455
数据库选课管理系统 发布:2024-11-15 12:10:15 浏览:126
android音乐波形图 发布:2024-11-15 11:57:12 浏览:378
福建社保银行卡初始密码是多少 发布:2024-11-15 11:47:40 浏览:911
游戏多开用什么配置 发布:2024-11-15 11:46:51 浏览:729
管理java版本 发布:2024-11-15 11:44:03 浏览:629
ndk编译的程序如何执行 发布:2024-11-15 11:43:18 浏览:626
轻应用服务器适合搭建网站吗 发布:2024-11-15 11:36:08 浏览:246
c语言的百分号 发布:2024-11-15 11:34:24 浏览:31
一加五安卓8什么时候推送 发布:2024-11-15 11:19:40 浏览:854