php父类函数
‘壹’ php怎么获取父类函数里面的变量值
<?php
classA{public$a1='a1';protected$a2='a2';functiontest(){echo"hello!<hr/>";}}
classBextendsA{//若A类和B类不在同一文件中请包含后(include)再操作
public$a1='b1';functiontest2(){$this->test();parent::test();//子类调用父类方法}
functiontest()
{echo$this->a1.',';echo$this->a2.',';echo"b2_test_hello<hr/>";}}
$a=newB();$a->test();//b1,a2,b2_test_hello
$a->test2();//b1,a2,b2_test_hello//hello!
?>
方法的调用:$this->方法名();如果子类中有该方法则调用的是子类中的方法,若没有则虚绝是调用父类滚竖中的
parent::则始终调用的是父类中的方法。
变量的调用:$this->变量名;如果子类中有该变大誉大量则调用的是子类中的,若没有则调用的是父类中的
‘贰’ php写函数 根据子类(id)递归查找顶级父类(id) 返回父类名字 (表结构:id name pid)
你这种表结构叫邻接缓租表,查询或皮的方式通过自连接。如
SELECTt1.nameASlev1,t2.nameaslev2,t3.nameaslev3,t4.nameaslev4
FROMTbnameASt1
LEFTJOINTbnameASt2ONt2.pid=t1.id
LEFTJOINTbnameASt3ONt3.pid=t2.id
LEFTJOINTbnameASt4ONt4.pid=t3.id
WHEREt1.name='XXXX'
这种方法的主要局限是你需要为每层数据添加一个自连接,随着层次的增加,自连接
变得越来越复杂,检索的性能自然而然的也就下降了。当然这种结构在查询前必须知道该节点所处的层级,否则无法确定自连接的深度。
邻接表模型衫哪差的局限性很大,用纯SQL实现有一定的难度。不妨考虑其他模型,比如嵌套模型。
嵌套模型的基本结构是树型结构,SQL检索比邻接表要方便很多。
关于嵌套模型,PHPChina的第一期电子杂志PHPer也有过深入探讨,请参考!
‘叁’ php怎么获取父函数名
函数是没有父子关系的,所以无法获取父函数名。
对象具有父子关系,但是方法名称和父类的方法名称必然是同名的。
另一种可能是你想问谁调用的当前函数,可以打印堆栈信息。print_r(debug_backtrace());
‘肆’ 在php中,子类extends继承了父类,当子类和父类同时存在构造函数__construct先执行哪一个呢
1、如果父类和子类中都没有显式的定义__construct,在实例化子类对象时,只会隐含的调用子类自己的构造方法。
2、如果父类中有显式的构造方法__construct,而子类中没有定义__construct,在实例化子类对象时,就会调用父类中的构造方法。
3、如果父类和子类中都显式的定义了__construct,在实例化子类对象时,只会调用子类自己的构造方法(这就像是子类重构了父类的构造方法),而如果也想要调用父类的构造方法的话,就需要在子类的__construct 方法中显式的调用,(如 __construct(){ parent::_construct();})。
(4)php父类函数扩展阅读
子类的构造函数名与子类名相同。
在子类里父类的构造函数不会自动执行。
要在子类里执行父类的构造函数,必须执行类似以下语句:
$this->[父类的构造函数名()]
类的构造函数统一命名为__construct()。
子类的构造函数名也是__construct()(也是废话)。
在子类里父类的构造函数会不会执行,分两种情况:
1、如子类不定义构造函数 __construct(),则父类的构造函数默认会被继承下来,且会自动执行。
2、如子类定义了构造函数 __construct(),因为构造函数名也是__construct(),所以子类的构造函数实际上是覆盖(override)了父类的构造函数。这时执行的是该子类的构造函数。
这时如果要在子类里执行父类的构造函数,必须执行类似以下语句:parent::__construct();
‘伍’ php继承一个父类,如何自动执行父类方法
你在父类写一个成员函数 然后子类继承 创建子类对象的时候 可以点出来父类的成员函数
比如
Student zs = new Student();
zs.SayHello() //点出来的是从父类的继承来的成员函数
输出结果为父类的->我是人类
publicclassPerson
{
publicvoidSayHello()//这只是父类的SayHello
{
echo"我是人类";
}
}
publicclassStudent:Person//已经继承了Person父类
{
//我什么都没写
}