本节内容:
php面向对象中的魔术方法
包括:
__set() 方法用于设置私有属性值。
__get() 方法用于获取私有属性值。
__isset()() 方法用于检测私有属性值是否被设定。
__unset() 方法用于删除私有属性。
实际应用中,经常会把类的属性设置为私有(private),那么需要对属性进行访问时,就会变得麻烦。虽然可以将对属性的访问写成一个方法来实现,但 PHP 提供了一些特殊方法来方便此类操作。
__set()
__set() 方法用于设置私有属性值:
{
$this->$property_name = $value;
}
在类里面使用了 __set() 方法后,当使用 $p1->name = "张三"; 这样的方式去设置对象私有属性的值时,就会自动调用 __set() 方法来设置私有属性的值。
__get()
__get() 方法用于获取私有属性值:
{
return isset($this->$property_name) ? $this->$property_name : null;
}
例子:
class Person {
private $name;
private $sex;
private $age;
//__set()方法用来设置私有属性
function __set($property_name, $value) {
echo "在直接设置私有属性值的时候,自动调用了这个 __set() 方法为私有属性赋值<br />";
$this->$property_name = $value;
} www.
//__get()方法用来获取私有属性
function __get($property_name) {
echo "在直接获取私有属性值的时候,自动调用了这个 __get() 方法<br />";
return isset($this->$property_name) ? $this->$property_name : null;
}
}
$p1=new Person();
//直接为私有属性赋值的操作, 会自动调用 __set() 方法进行赋值
$p1->name = "张三";
//直接获取私有属性的值, 会自动调用 __get() 方法,返回成员属性的值
echo "我的名字叫:".$p1->name;
?>
运行,输出:
在直接设置私有属性值的时候,自动调用了这个 __set() 方法为私有属性赋值
在直接获取私有属性值的时候,自动调用了这个 __get() 方法
我的名字叫:张三
__isset()
__isset() 方法用于检测私有属性值是否被设定。
如果对象里面成员是公有的,可以直接使用 isset() 函数。如果是私有的成员属性,那就需要在类里面加上一个 __isset() 方法:
{
return isset($this->$property_name);
}
这样当在类外部使用 isset() 函数来测定对象里面的私有成员是否被设定时,就会自动调用 __isset() 方法来检测。
__unset()
__unset() 方法用于删除私有属性。
同 isset() 函数一样,unset() 函数只能删除对象的公有成员属性,当要删除对象内部的私有成员属性时,需要使用__unset() 方法:
{
unset($this->$property_name);
}
>>> 查看更多 php入门教程 <<<
本节内容:
php面向对象之封装
php面向对象的封装性:
1,就是把对象的成员(属性,方法)结合成一个独立的相同单位,并尽可能隐藏对象的内部细节。
public protected
private 私有的,用这个关键字修饰的成员,只能在对象内部访问(只有用$this访问),不能在对象外部使用。
例子:
<?php
class Person{
private $name;
private $age;
private $sex;
function __construct($name="",$age=20,$sex="male"){
$this->name=$name;
$this->age=$age;
$this->sex=$sex;
}
function getPro($name){
return $this->$name;
}
function setAge($age){
if($age>100||$age<0){
return;
} // www.
$this->age=$age;
}
function getAge(){
if($this->age<30){
return $this->age;
}elseif($this->age<40){
return $this->age-5;
}elseif($this->age<50){
return $this->age-10;
}else{
return $this->age-15;
}
}
function say(){
echo "我的名字是:".$this->name.",年龄是:".$this->age.",性别是:".$this->sex.'<br>';
}
function __destruct(){
echo $this->name.",再见"."<br>";
}
}
$p1=new Person("rayhooo",26,"male");
$p1->say();
echo $p1->getPro("name").'<br>';
$p1->setAge(45);
echo $p1->getAge().'<br>';
>>> 查看更多 php入门教程 <<<
本节内容:
php面向对象中的构造方法与析构方法
1,构造方法
大多数类都有一种称为构造函数的特殊方法。当创建一个对象时,它将自动调用构造函数,也就是使用new这个关键字来实例化对象的时候自动调用构造方法。
构造函数的声明与其它操作的声明一样,只是其名称必须是__construct( )。这是PHP5中的变化,以前的版本中,构造函数的名称必须与类名相同,这种在PHP5中仍然可以用,但现在以经很少有人用了,这样做的好处是可以使构造函数独立于类名,当类名发生改变时不需要改相应的构造函数名称了。为了向下兼容,如果一个类中没有名为__construct( )的方法,PHP将搜索一个php4中的写法,与类名相同名的构造方法。
格式:function __construct ( [参数] ) { ... ... }
在一个类中只能声明一个构造方法,而是只有在每次创建对象的时候都会去调用一次构造方法,不能主动的调用这个方法,所以通常用它执行一些有用的初始化任务。比如对成属性在创建对象的时候赋初值。
例子:
//创建一个人类
class Person
{
//下面是人的成员属性
var $name;
var $sex;
var $age;
//定义一个构造方法参数为$name、$sex和 $age
function __construct($name, $sex, $age)
{
//通过构造方法传进来的$name给成员属性$this->name赋初使值
$this->name=$name;
//通过构造方法传进来的$sex给成员属性$this->sex赋初使值
$this->sex=$sex;
//通过构造方法传进来的$age给成员属性$this->age赋初使值
$this->age=$age;
}
//这个人的说话方法
function say()
{
echo "我的名子叫:".$this->name." 性别:".$this->sex." 我的年龄是:".$this->age."<br>";
}
}
//通过构造方法创建3个对象$p1、p2、$p3,分别传入三个不同的实参为姓名、性别和年龄
$p1=new Person(“张3”,”男”, 22);
$p2=new Person(“李4”,”女”, 33);
$p3=new Person(“王5”,”男”, 44);
//下面访问$p1对象中的说话方法
$p1->say();
//下面访问$p2对象中的说话方法
$p2->say();
//下面访问$p3对象中的说话方法
$p3->say();
?>
输出结果:
我的名子叫:张3性别:男我的年龄是:22
我的名子叫:李4性别:女我的年龄是:33
我的名子叫:王5性别:男我的年龄是:44
2,析构函数:
与构造函数相对的就是析构函数。析构函数是PHP5新添加的内容,在PHP4中没有析构函数。析构函数允许在销毁一个类之前执行的一些操作或完成一些功能,比如说关闭文件,释放结果集等,析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行,也就是对象在内存中被销毁前调用析构函数。与构造函数的名称类似,一个类的析构函数名称必须是__destruct( )。析构函数不能带有任何参数。
格式:function __destruct ( ) { ... ... }
例子,
//创建一个人类
class Person
{
//下面是人的成员属性
var $name;
var $sex;
var $age;
//定义一个构造方法参数为$name、$sex和$age
function __construct($name, $sex, $age)
{
//通过构造方法传进来的$name给成员属性$this->name赋初使值
$this->name=$name;
//通过构造方法传进来的$sex给成员属性$this->sex赋初使值
$this->sex=$sex;
//通过构造方法传进来的$age给成员属性$this->age赋初使值
$this->age=$age;
}
//这个人的说话方法
function say()
{
echo "我的名子叫:".$this->name." 性别:".$this->sex." 我的年龄是:".$this->age."<br>";
}
//这是一个析构函数,在对象销毁前调用
function __destruct()
{ // www.
echo “再见”.$this->name.”<br>”;
}
//通过构造方法创建3个对象$p1、p2、$p3,分别传入三个不同的实参为姓名、性别和年龄
$p1=new Person(“张3”,”男”, 22);
$p2=new Person(“李4”,”女”, 33);
$p3=new Person(“王5”,”男”, 44);
//下面访问$p1对象中的说话方法
$p1->say();
//下面访问$p2对象中的说话方法
$p2->say();
//下面访问$p3对象中的说话方法
$p3->say();
?>
输出结果:
我的名子叫:张3性别:男我的年龄是:22
我的名子叫:李4性别:女我的年龄是:33
我的名子叫:王5性别:男我的年龄是:44
销毁张3
销毁李4
销毁王5
>>> 查看更多 php入门教程 <<<