导航:首页 > 编程语言 > php超类

php超类

发布时间:2024-03-29 06:14:23

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

B. php子类怎么使用父类的use

你指的是导入命名空间的语法 use?

那不存在父类子类的说法。use只是将另外一个命名空间的定义(类或函数等)导入到当前命名空间使用。

每个文件(如果一个文件有多个命名空间,那每个命名空间导入一次)使用该语法导入一次,就可以一正常使用了。

如果一个文件里同时定义了两个类,同时只有一个命名空间,那在命名空间后导入一次就可以在两个类里同时使用了

PHP: 命名空间

C. php写函数 根据子类(id)递归查找顶级父类(id) 返回父类名字 (表结构:id name pid)

你肯定得是两张表吧 一张是 table1 (id name pid ) 一张是 table 2(pid name)

多表联查:select table2.name as p_name , pid as p_id from table1 right join table2 on table1.pid=table2.pid where id=' 输入你的子类ID'

就可以查询了 ,望采纳

D. php中self的真正含义是什么为什么可以调用父类 的成员和方法 - PHP进阶讨论

self对应static$this是非static这两者总和相当于Java里面的thisparent相当于Java里面的super我问你
你要在子类中执行父类的构造器怎么执行?TankMe
发表于
2009-9-9
16:19[i]self是这个类。this是这个类现在创建的对象。而不是单纯的只指静态非静态。self从理论上在php里是可以调用帆丛任何东西的。。。php6可以支持直接调用静态和非静态。因为他是和::符配合的。。。只要是这个类里面侍判的任何成员和方法都能调态谈樱用。。。你把php所有错误提示关闭。就可以执行。。。我记得我以前测试过一下的。。。php5貌似会抛出一个warring。。我忘记当时测试的结果了。但是从文档上看到得这理论是可行的

E. PHP怎么在子类用父类的魔术方法

父类的魔术方法:
function __construct()
{
echo '我是父类的构造函数(魔术方法)';

}

function __unset()
{
echo '我是父类的销毁方法(魔术方法)';

}
子类调用
function index()
{
parent::__construct();

parent::__unset();

}
输出:
我是父类的构造函数(魔术方法)
我是父类的销毁方法(魔术方法)

F. 父类中被final标识的方法,在子类中可以调用吗

可以,被final修饰的任何继承自这个类的子类,都不能够在自己的方法当中来覆盖他父类的这个方法。

阅读全文

与php超类相关的资料

热点内容
主角穿越苏联解体前当倒爷 浏览:169
女主列开衣服说“看啊,看够了没有”的电影 浏览:154
台湾红羊 下载 浏览:745
mov无损压缩 浏览:988
新妈妈演员表女主角朱艺彬 浏览:197
eve美服测试服命令 浏览:86
提取压缩文件密码 浏览:863
母亲节电影展播维吾尔语 浏览:429
JUQ 276迅雷下载 浏览:228
wifi怎么求加密的密码 浏览:963
关闭命令框 浏览:204
手机九键怎么设置加密信息 浏览:253
工程财务预决算法 浏览:969
沐风之女未删减完整版在线免费观看 浏览:990
怎么提高编程思想 浏览:23
程序员给女朋友的相册代码 浏览:936
什么是物质压缩 浏览:496
韩国男女主拍吻戏然后打了起来是哪部电影 浏览:238
西门子编程怎样 浏览:908
小老孩韩国电影 浏览:473