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

php函数继承

发布时间: 2022-11-18 00:14:52

1. 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()的属性,还可以定义自己的属性。与此同时他长的就和他兄弟不同了,但又有一样的“血统(使用父类的方法)”。

2. php怎样继承变量

function logged(){
global $db,$sessions,$time_now;
.....
}

3. php 继承时,方法可见性只能更高,即对于同一方法,父类为protected ,子类只能是protected 或者 public.

一个语言一种规矩,没必要较真去比较,如果都一样了,那就不是php了,php还是单继承呢,你怎么不去较真,php是5.0以后引用的面向对象,5.0之前照样能实现工作,你怎么不说java非要用面向对象去写呢,一个道理,别较真

4. php子类的构造函数能继承父类的吗

可以继承的,你加上parent::_construct(),方式访问就可以。

5. PHP中类的继承以及构造函数,和实例的属性顺序问题

父类的参数__construct($name,$age,$avoirpois,$sex)不正好是这个顺序嘛

6. php 有关面向对象继承构造函数初始化的问题

写几点提示供参考:

1、在类的继承中,扩展或派生出来的类(子类)拥有其基类(父类)的所有变量和函数,并包含所有派生类中定义的部分。

也就说,你上面的在子类里类似

private $debugmessage;

这句代码其实没什么意义。

2、如果你在子类里,又定义了与父类里同名的方法,那么,父类的方法会被覆盖,也就是说,你调用的是子类实现的代码。

3、
this 指向的是当前对象
self 指向当前的类
parent 指向的是父类

7. php继承一个父类,如何自动执行父类方法

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


比如

Student zs = new Student();

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

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

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

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


8. php的子类继承父类问题!

如果你想表达.子类不想输出父类的字段和方法,那么你就只有在子类里面重新写和父类一样的字段和方法名,然后重新赋值,输出子类,就是子类自己的字段和方法了,而父类不会改变

你说的接口函数到底是什么接口函数,是interface?还是普通的public function,还是什么

9. 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()魔术方法来模拟属性的继承。请你动手实践。

10. php继承中方法重载(覆盖)的应用场合

本文实例分析了php继承中方法重载(覆盖)的应用场合。分享给大家供大家参考。具体分析如下:
方法重载(override)/覆盖——在什么情况下使用:当父类知道所有的子类都需要用到一个方法,但父类不知道怎么去写这个方法时,就需要用到方法的重载。这时候,可以让子类去重写,来覆盖这个方法。
通俗实例——父类(动物)知道其子类(猫和狗)都会叫,但它们的叫法都不一样,所以父类没法去写这个方法,只能让子类(猫和狗)去定义。代码如下:
<?php
class
Animal{
public
$name;
protected
$price;
function
cry(){
echo
"不知道动物怎么叫";
}
}
class
Dog
extends
Animal{
function
cry(){
echo
"汪汪...";
}
}
class
Pig
extends
Animal{
function
cry(){
echo
"哼哼..."
}
}
?>
方法重载/覆盖的要点与细节(读起来有点呦口):
1、要求子类的方法,其方法名称、参数列表与父类方法一模一样。如例子中cry(),不能添加参数,改成cry($naaa)等。注意:这里并不要求参数名一样,只是要求参数的个数是一样的。
2、所谓的重载或覆盖,并不是将父类的方法覆盖。也可以这么理解:如果子类有调用该方法时,如果在自己类里找不到这个方法,那么它会去找父类里,看有没有这个方法。这也是多态的理解
3、如果子类里某个方法,要把父类里相同名称方法里的内容继承下来,可以使用
parent::方法名

父类名::方法名
继承。在子类定义的方法内使用。
4、访问权限问题,子类的访问范围>=父类的访问范围,即如果父类是protected
function
cry(),子类则只能是protected或public。
希望本文所述对大家的php程序设计有所帮助。

热点内容
设qq密码时应该设什么 发布:2025-01-14 02:13:20 浏览:605
剑侠情缘主线脚本 发布:2025-01-14 02:11:05 浏览:410
java执行ftp命令 发布:2025-01-14 02:05:21 浏览:937
青柠檬编程 发布:2025-01-14 02:05:18 浏览:882
下载加密日记本 发布:2025-01-14 02:05:16 浏览:538
汽车的假配置有哪些 发布:2025-01-14 02:03:16 浏览:41
二次插值算法 发布:2025-01-14 02:02:01 浏览:163
江西页游服务器云主机 发布:2025-01-14 02:01:17 浏览:492
安卓配置描述文件在哪里 发布:2025-01-14 01:51:21 浏览:260
android数据xml存储 发布:2025-01-14 01:48:45 浏览:369