PHP面向对象之构造方法__construct()和析构方法

  •   
  • 3077
  • PHP
  • 7
  • super_dodo
  • 2016/08/12

在PHP中定义类可能需要用到PHP中的构造函数不同,在PHP中构造函数用__construct() 这样可以保证在改变类名的时候不用再去改变构造函数名。它还有一个析构函数__destruct(),用它来销毁实例,释放资源。

一旦你定义了一个类,你可以用new来建立一个这个类的实例. 类的定义是设计图,实例则是放在装配线上的元件. New需要类的名称,并返回该类的一个实例. 如果构造函数需要参数,你应当在new后输入参数.

/**
 * 计数的类,用来演示PHP的构造函数和析构函数
 */
class Counter{

	private static $count = 0;
	private static $bb = 0;

	//构造函数
	function __construct($aa){
		self::$count++;
		$this->aa = $aa;
		self::$bb = $aa*self::$count;
	}

	//析构函数
	function __destruct(){
		self::$count--;
	}

	//得到当前的计数器的值
	function getCount(){
		return self::$count;
	}

	//得到aa的值
	function getAa(){
		return $this->aa;
	}

	//得到bb的值
	function getBb(){
		return self::$bb;
	}
}

//建立第一个实例
$c = new Counter($aa='111');	//此时就调用了构造函数
echo $c->getCount()."<hr>";		//输出1

//建立第二个实例
$c1 = new Counter($aa='111');
echo $c->getCount()."<hr>";		//输出2

//建立第三个实例
$c2 = new Counter($aa='111');
echo $c->getCount()."<hr>";		//输出3

//销毁实例
$c2 = NULL;		//调用了析构函数
echo $c->getCount()."<hr>";		//输出2

//--
echo $c->getAa()."<hr>";		//输出 111
echo $c->getBb()."<hr>";		//输出 333

__construct() 函数创建一个新的 SimpleXMLElement 对象。如果成功,则该函数返回一个对象。如果失败,则返回 false。

//语法:
__construct(data,options,is_url,ns,is_prefix)

//参数 描述
data 必需。形式良好的 XML 字符串或 XML 文档的路径或 URL。 
options 可选。规定附加的 Libxml 参数。 
is_url 可选。规定 data 参数是否是 URL。默认是 false。 
ns 可选。 
is_prefix 可选。

在类中声明构造方法需要注意的事项
1、在同一个类中只能声明一个构造方法,原因是,PHP不支持构造函数重载。
2、构造方法名称是以两个下画线开始的__construct()

class Person{
	public $name;
	public $age;
	public $sex;

	public function __construct($name="",$sex="男",$age=27){      //显示声明一个构造方法且带参数
		$this->name=$name;
		$this->sex=$sex;
		$this->age=$age;
	}

	public function say(){ 
		echo "我叫:".$this->name.",性别:".$this->sex.",年龄:".$this->age;
	}   

}


//创建对象$person1且不带任参数
$person1= new Person();
echo $person1->say();//输出:我叫:,性别:男,年龄:27

//创建对象$person2且带参数"张三"
$person2= new Person("张三");
echo $person2->say();//输出:我叫:张三,性别:男,年龄:27

//创建对象$person3且带三个参数
$person3= new Person("李四","男",25);
echo $person3->say();//输出:我叫:李四,性别:男,年龄:25