
PHP还是比较常用的,于是我研究了一下PHP构造函数,在这里拿出来和大家分享一下,希望对大家有用。如果你在一个类中声明一个函数,命名为__construct,这个函数将被当成是一个构造函数并在建立一个对象实例时被执行清楚地说,__是两个下划线就像其它任何函数一样,构造函数可能有参数或者默认值你可以定义一个类来建立一个对象并将其属性全放在一个语句(statement)中
你也可以定义一个名为__destruct的函数,PHP将在对象被销毁前调用这个函数它称为析构函数继承是类的一个强大功能一个类(子类/派生类)可以继承另一类(父类/基类)的功能派生类将包含有基类的所有属性和方法,并可以在派生类中加上其他属性和方法你也可以覆写基类的方法和属性就像312中显示的,你可以用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的两大oop使用型函数:构造函数(__construct)和析构函数(__destruct );
构造函数:当在某一页面写了众多函数,其中就包括构造函数,当你调用其中任一函数时,都将在调用此函数前先调用构造函数,如:你把链接数据库代码写到构造函数里面,然后在使用增删改查时,就不用再写连接s数据库语句了,因为有构造函数在,你就只用写增删改查类sql语句就可以了。
析构函数:和构造函数相反,在同一页面内,有众多函数,其中有析构函数,当你调用了某一函数之后,会自动执行析构函数,比如说你的增删改查用完了,是不是要关闭数据库连接来释放内存?析构函数就是这样用的。
构造函数就是在实例化类的时候就被运行的函数,可以有参数,也可以没有参数。构造函数主要用来在创建对象时初始化对象 即为对象成员变量赋初始值,比如说你的MyPc类,定义了$name,那么如果没有构造函数你在初始化MyPc类的时候$name的值就是空的,你可以定义一个构造函数来给$name一个值,因为很多时候我们并不允许某些对象变量的值是空的
function __construct
function 是系统关键词,表示定义一个方法,后面加空格然后根方法名( __construct
是方法名)。你的未加空格
__construct 是系统内置的,叫魔术方法,每次实例化类是会自动执行此方法。
还有就是调用类的成员变量不需要在变量前面加 $ 比如:
$this->school_name = $name; 正确
$this->$school_name = $name; 错误
<php
class School {
public $school_name;
public $school_student;
public $school_room;
public $school_teacher;
function __construct($name, $student, $room, $teacher) {
$this->school_name = $name;
$this->school_student = $student;
$this->school_room = $room;
$this->school_teacher = $teacher;
}
function show() {
echo "!@#$%^&";
}
}
class People extends School {
public $teachername;
function __construct($tname, $studentconsts) {
$this->teachername = $tname;
$this->school_student = $studentconsts;
}
function show() {
return "今天上课" $this->teachername "讲课,学生" $this->school_student "人";
}
}
class Tongji extends School {
function show() {
return "学校名:" $this->school_name "学生数:" $this->school_student "教室数:" $this->school_room "教师数:" $this->school_teacher;
}
}
$a = new People ( "周周周", 20 );
$b = new School ( "DZ", 20, 50, 2 );
echo $a->show () "<br>";
echo $b->show ();
>
构造函数一般只写1 个。如果不写__construct(){},那么你还是需要写一个构造器函数,只不过不用__construct()函数名,一般选择与你的类名相同。
__construct 构造方法,当一个对象创建时调用此方法,使用此方法的好处是:可以使构造方法有一个独一无二的名称,无论它所在的类的名称是什么,这样你在改变类的名称时,就不需要改变构造方法的名称。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)