1.1 对象中成员的访问
对成员属性的访问包括赋值操作和获取成员属性的操作。访问对象中的成员和访问数组中的元素类似。只能通过对象的引用来访问对象中的每个成员。
$引用名 = new 类名称([参数数列表]); //对象实例化格式
$引用名 -> 成员属性 = 值; //对成员属性赋值的操作
$echo $引用名 -> 成员属性; //获取成员属性的值
$引用名 -> 成员方法; //访问对象中的成员方法
如果对象中的成员不是静态的那么,“对象引用名->属性”或“对象引用名->方法”是唯一的访问形式。
1.2 特殊的对象引用”$this”
不管是在对象的外部还是在对象的内部,访问对象中的成员都必须使用对象的引用变量。但对象创建完成以后,对象的引用名称无法在对象的方法中找到。如果在对象的方法中再使用new关键字创建一个对象则是另一个对象,调用的成员也是另一个新创建对象的成员。
对象一旦被创建,在对象中的每个成员方法里面都会存在一个特殊的对象引用“ this”。成员方法属于哪个对象, this引用就代表哪个对象,专门用来完成对象内部成员之间的访问。
不管是在对象内部使用$this访问自己对象内部的成员,还是在对象外部通过对象的引用名称访问对象中的成员。都需要使用特殊的运算符”->”
class Person{
var $name;
var $sex;
var $age;
function say(){
echo "我的名字:".$this->name." 性别:".$this->sex." 年龄".$this->age;
}
function run(){
echo $this->name."在走路<br>";
}
}
1.3 构造方法与析构方法
构造方法 __construct() (两个下划线)
对象创建完成后第一个被对象自动调用的方法,一般完成一些初始化工作,类中默认会存在一个没有参数列表并且内容为空的构造方法。如果显式地声明,则将会用自定义的构造方法。
每次使用new来实例化对象都会自动调用构造方法。不能主动通过对象的引用来调用构造方法。
PHP5之前构造方法的名称必须与类名相同。为了向下兼容,如果一个类中没有名为__construct的构造方法,则会自动搜索与类名相同的构造方法。
function __construct([参数列表]){ //构造方法名称是以两个下划线开始
//方法体,一般对成员属性初始化赋值
}
析构方法 __destruct() (两个下划线)
PHP将在对象被销毁前自动调用这个方法。析构方法允许在销毁一个对象之前执行一些特定的操作。例如关闭文件,释放结果集。
当对内存段中的对象失去访问它的引用时,它就不能被访问,也就成为垃圾对象。通常对象的引用被赋予其他的值或者在页面运行结束时,对象就会事情引用。PHP有一种垃圾回收机制,当对象不能被访问时就会自动启动垃圾回收程序。回收对象在内存中的占用空间。而析构方法正是在垃圾回收程序回收对象之前调用的。
析构函数不能带有任何参数
function __destruct(){ //同样是以两个下划线开头
//方法体,通常完成一些在对象销毁前的清理任务
}
例如
class Person{
var $name;
var $sex;
var $age;
//构造方法,一般完成初始化工作
function __construct($name,$sex,$age){
$this->name = $name;
$this->sex = $sex;
$this->age = $age;
}
function say(){
echo "我的名字是:".$this->name;
}
//析构方法,一般完成对象销毁前的操作
function __destruct(){
echo "bye:".$this->name."<br/>";
}
}
$person1 = new Person("张三","男",20);
$person1 = null;
$person2 = new Person("王五","男",21);
$person3 = new Person("赵六","男",18);
结果会是:
bye: 张三
bye: 赵六
bye: 王五
第一个对象由于 赋为空值,因此最先失去引用,不能被访问,自动调用析构方法,输出”bye:张三”.后面声明的两个对象都是在页面执行结束失去的引用,由于对象的引用都是存放在栈内存中的,根据其先进先出的特点,最后创建的对象引用会被最先释放,因此形成了这种情况。