很多站长朋友们都不太清楚php继承实例化,今天小编就来给大家整理php继承实例化,希望对各位有所帮助,具体内容如下:
本文目录一览: 1、 PHP类继承的问题,子类继承父类,实例化子类,先执行父类还是先执行子类? 2、 php中的类是单继承,那要有多个类继承怎么办? 3、 thinkphp 怎么实例化继承MongoModel的模型类 4、 php继承一个父类,如何自动执行父类方法 5、 php中在实例化后怎么调用基类的方法 PHP类继承的问题,子类继承父类,实例化子类,先执行父类还是先执行子类?不是这个意思。所谓“实例化子类的对象前要先实例化父类中的内容,为父类初始化”,是指当子类正在实例化时,总是链式调用父类构造方法初始化父类空间。换句话说,子类的构造方法必须先调用父类的构造方法,完了才能干别的初始化工作。如果子类没有显式调用语句,编译器会隐式帮你加上。
如:
public class A{ public A() { }}public class B extends A{ public B() { }}等价于:
public class A{ public A() { super();//这里实际上是Object(); //其他初始化工作 }}public class B extends A{ public B() { super();//这里实际上是A(); //其他初始化工作 }}另外,如果有这种情况:
public class A{ X x=new X(); public A() { }}public class B extends A{ Y y=new Y(); public B() {//这是类A空间里的字段都已经初始化完毕。 }}在成员y被赋值之前,x一定已经存在。换句话说,X x=new X();一定先于Y y=new Y();执行。
php中的类是单继承,那要有多个类继承怎么办?PHP没有多继承的特性。即使是一门支持多继承的编程语言,我们也很少会使用这个特性。在大多数人看来,多继承不是一种好的设计方法。想要给某个类添加额外的特性,不一定要使用继承。这里我提供一种模拟多继承的方法以供参考。
PHP有一个魔术方法,叫做__call。当你调用一个不存在的方法时,这个方法会被自动调用。这时,我们就有机会将调用重定向到一个存在的方法。继承多个父类的子类,寻找方法的过程一般是这样的:
本身的方法 -> 父类1的方法 -> 父类2的方法...
模拟过程大致是这样:将各个父类实例化,然后作为子类的属性。这些父类提供一些公有的方法。当子类拥有某方法时,__call()函数不会被调用。这相当于“覆盖”了父类的方法。当调用了不存在的方法时,通过__call()方法依次从父类中寻找可以调用的方法。虽然这不是完备的多继承,但可以帮助我们解决问题。
<?php
class Parent1 {
function method1() {}
function method2() {}
}
class Parent2 {
function method3() {}
function method4() {}
}
class Child {
protected $_parents = array();
public function Child(array $parents=array()) {
$_parents = $parents;
}
public function __call($method, $args) {
// 从“父类"中查找方法
foreach ($this->_parents as $p) {
if (is_callable(array($p, $method))) {
return call_user_func_array(array($p, $method), $args);
}
}
// 恢复默认的行为,会引发一个方法不存在的致命错误
return call_user_func_array(array($this, $method), $args);
}
}
$obj = new Child(array(new Parent1(), new Parent2()));
$obj->method1();
$obj->method3();
这里没有涉及属性的继承,但实现起来并不困难。可以通过__set()和__get()魔术方法来模拟属性的继承。请你动手实践。
thinkphp 怎么实例化继承MongoModel的模型类用M或D不可以吗?
试试:
$User = new \Home\Model\UserModel();
$Info = new \Admin\Model\InfoModel();
// 带参数实例化
$New = new \Home\Model\NewModel('blog','think_',$connection);
php继承一个父类,如何自动执行父类方法你在父类写一个成员函数 然后子类继承 创建子类对象的时候 可以点出来父类的成员函数
比如
Student zs = new Student();
zs.SayHello() //点出来的是从父类的继承来的成员函数
输出结果为父类的->我是人类
public class Person
{
public void SayHello() //这只是父类的SayHello
{
echo"我是人类";
}
}
public class Student:Person //已经继承了Person父类
{
//我什么都没写
}
php中在实例化后怎么调用基类的方法只要你继承了基类可以直接调用 :
class Base {
public function action () {
return 'hello world!';
}
}
class Child extends Base {
//...
}
$var = new Child;
echo $var -> action();
关于php继承实例化的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。