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

php继承构造函数

发布时间: 2022-09-05 01:34:58

❶ 在php中,子类extends继承了父类,当子类和父类同时存在构造函数__construct先执行哪一个呢

1、如果父类和子类中都没有显式的定义__construct,在实例化子类对象时,只会隐含的调用子类自己的构造方法。

2、如果父类中有显式的构造方法__construct,而子类中没有定义__construct,在实例化子类对象时,就会调用父类中的构造方法。

3、如果父类和子类中都显式的定义了__construct,在实例化子类对象时,只会调用子类自己的构造方法(这就像是子类重构了父类的构造方法),而如果也想要调用父类的构造方法的话,就需要在子类的__construct 方法中显式的调用,(如 __construct(){ parent::_construct();})。


(1)php继承构造函数扩展阅读

子类的构造函数名与子类名相同。

在子类里父类的构造函数不会自动执行。

要在子类里执行父类的构造函数,必须执行类似以下语句:

$this->[父类的构造函数名()]

类的构造函数统一命名为__construct()。

子类的构造函数名也是__construct()(也是废话)。

在子类里父类的构造函数会不会执行,分两种情况:

1、如子类不定义构造函数 __construct(),则父类的构造函数默认会被继承下来,且会自动执行。

2、如子类定义了构造函数 __construct(),因为构造函数名也是__construct(),所以子类的构造函数实际上是覆盖(override)了父类的构造函数。这时执行的是该子类的构造函数。

这时如果要在子类里执行父类的构造函数,必须执行类似以下语句:parent::__construct();

❷ PHP构造函数传递值的问题

__construct($hostname)里面的参数是构造函数的参数,只能在构造函数内部调用,
public $hostname;这是类的参数,整个类内部包括继承类都可以调用

第二种的参数只能在构造函数中使用,而第一种,则将传来的参数赋值给类的变量,所以第一种的hostname整个类内部的方法都可以使用$this->hostname来调用

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

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

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

写几点提示供参考:

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

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

private $debugmessage;

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

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

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

❺ PHP5,声明构造函数使用什么关键字,析构函数使用什么关键字

PHP还是比较常用的,于是我研究了一下PHP构造函数,在这里拿出来和大家分享一下,希望对大家有用。如果你在一个类中声明一个函数,命名为__construct,这个函数将被当成是一个构造函数并在建立一个对象实例时被执行.清楚地说,__是两个下划线.就像其它任何函数一样,构造函数可能有参数或者默认值.你可以定义一个类来建立一个对象并将其属性全放在一个语句(statement)中.
你也可以定义一个名为__destruct的函数,PHP将在对象被销毁前调用这个函数.它称为析构函数.继承是类的一个强大功能.一个类(子类/派生类)可以继承另一类(父类/基类)的功能.派生类将包含有基类的所有属性和方法,并可以在派生类中加上其他属性和方法.你也可以覆写基类的方法和属性.就像3.1.2中显示的,你可以用extends关键字来继承一个类.
你可能想知道构造函数是如何被继承的.当它们和其它方法一起被继承时,他们不会在创建对象时被执行.如果你需要这个功能,你需要用第二章提到的::运算符.它允许你指向一块命名空间.parent指向父类命名空间,你可以用parent::__construct来调用父类的构造函数.

一些面向对象语言在类之后命名构造函数.PHP的前几个版本也是如此,到现在这种方法仍然有效.也就是:如果你把一个类命名为Animal并且在其中建立一个命名也是Animal的方法,则这个方法就是构造函数.如果一个类的同时拥有__construt构造函数和与类名相同的函数,PHP将把__construct看作构造函数.这使得用以前的PHP版本所写的类仍然可以使用.但新的脚本(PHP5)应当使用__construct.

PHP的这种新的声明构造函数的方法可以使构造函数有一个独一无二的名称,无论它所在的类的名称是什么.这样你在改变类的名称时,就不需要改变构造函数的名称.你可能在PHP中给构造函数一个像其它类方法一样的访问方式.访问方式将会影响从一定范围内实例化对象的能力.这允许实现一些固定的设计模式,如Singleton模式.析构函数,相反于构造函数.PHP调用它们来将一个对象从内存中销毁.默认地,PHP仅仅释放对象属性所占用的内存并销毁对象相关的资源.析构函数允许你在使用一个对象之后执行任意代码来清除内存.
当PHP决定你的脚本不再与对象相关时,析构函数将被调用.在一个函数的命名空间内,这会发生在函数return的时候.对于全局变量,这发生于脚本结束的时候.如果你想明确地销毁一个对象,你可以给指向该对象的变量分配任何其它值.通常将变量赋值勤为NULL或者调用unset.
下面的例子中,计算从类中实例化的对象的个数.Counter类从PHP构造函数开始增值,在析构函数减值.一旦你定义了一个类,你可以用new来建立一个这个类的实例.类的定义是设计图,实例则是放在装配线上的元件.New需要类的名称,并返回该类的一个实例.如果PHP构造函数需要参数,你应当在new后输入参数.
<?phpclassCounter { privatestatic$count=0; function__construct() { self::$count++; } function__destruct() { self::$count--; } functiongetCount() { returnself::$count; } } //建立第一个实例 $c=newCounter();//输出1 print($c->getCount()."<br>n"); //建立第二个实例 $c2=newCounter(); //输出2 print($c->getCount()."<br>n"); //销毁实例 $c2=NULL; //输出1 print($c->getCount()."<br>n");?>

与构造函数相反,在PHP5中,可以定义一个名为__destruct()的函数,称之为PHP5析构函数,PHP将在对象在内存中被销毁前调用析构函数,使对象在彻底消失之前完成一些工作。对象在销毁一般可以通过赋值为null实现。

❻ [PHP]关于子类继承构造函数及其怎么去实例化赋值的问题

“该如何去实例化才不会报错!”不明白你说的这一句,你把会报错的代码贴出来。

另外,对你的写法感到奇怪:
$name,$personSex, $personAge 这3个东西都是public的,还要什么构造函数,任何实例生成后都可以直接修改它的
如果你希望$name同样被其子孙使用,那么应该protected,如果其子孙类定义内并不使用它,那么应该private,当然,你应该在Animal定义内提供getter、setter来访问这一属性,或者用构造函数设定它,然后只提供getter方法(只读属性)

❼ php 子类没有构造函数会调用父类构造函数吗

会调用的,试试下面的代码:

<?php
class f
{
function f()
{echo 'in f';}
}
class z extends f
{
function show()
{echo 'in z';}
}
$z=new z;
$z->show();
?>

❽ php 构造函数中的变量不能被其他函数使用吗

test类用extends继承了tools类,如果tools类里面有构造方法的话,test是可以用的。tools的私有成员不能使用,其他都可以。至于构造函数,定义js函数有三种方式,有一种可以叫做构造函数方法定义。至于php中,应该没这说法,在类外面的function叫函数,在类里面见方法或构造方法。

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

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

❿ php5的构造函数和析构函数有哪些

构造函数:void __construct ([ mixed $args [, $... ]] )
PHP5允许开发人员为类定义构造函数。包含构造函数的类在创建实例时将自动调用其构造函数,所以构造函数适合完成初始化对象的操作。
注意:如果子类定义了构造函数,那么父类的构造函数将不会被自动的隐式的调用。如果需要运行父类的构造函数,需要执行parent::__construct()。如果子类没有显式的定义构造函数,那么子类将继承父类的构造函数,并直接运行。 析构函数:
PHP5引入了析构函数的概念,类似于C++等面向对象语言中的析构函数的概念。析构函数在类实例的引用失效时、对象被销毁、超出作用域、以及任意关闭序列时,将被调用。 注意:类似构造函数,当子类定义了自己的析构函数,需要使用parent::__destruct()来调用父类的析构函数。

热点内容
电脑怎么查卡配置 发布:2025-01-14 20:01:29 浏览:27
手机怎么控制服务器 发布:2025-01-14 19:58:46 浏览:307
php难招 发布:2025-01-14 19:06:07 浏览:489
sublime编译php 发布:2025-01-14 18:57:16 浏览:307
云计算服务器是什么 发布:2025-01-14 18:56:22 浏览:44
vip域名查询ftp 发布:2025-01-14 18:46:48 浏览:116
格式化linux 发布:2025-01-14 18:35:14 浏览:595
如何进入安卓原生市场 发布:2025-01-14 18:22:06 浏览:560
台式电脑找不到服务器 发布:2025-01-14 18:19:58 浏览:423
androidsdk网盘 发布:2025-01-14 18:17:43 浏览:82