PHP 特殊方法 __set()、__get()、__isset() 与 __unset()

  • __set() 方法用于设置私有属性值。
  • __get() 方法用于获取私有属性值。
  • __isset() 方法用于检测私有属性值是否被设定。
  • __unset() 方法用于删除私有属性。

实际应用中,经常会把类的属性设置为私有(private),那么需要对属性进行访问时,就会变得麻烦。虽然可以将对属性的访问写成一个方法来实现,但 PHP 提供了一些特殊方法来方便此类操作。

__set()

__set() 方法用于设置私有属性值:

function __set($property_name, $value)
{
    $this->$property_name = $value;
}

在类里面使用了 __set() 方法后,当使用 $p1->name = "张三"; 这样的方式去设置对象私有属性的值时,就会自动调用 __set() 方法来设置私有属性的值。

__get()

__get() 方法用于获取私有属性值:

function __set($property_name, $value)
{
    return isset($this->$property_name) ? $this->$property_name : null;
}

例子:

<?php
class Person {
    private $name;
    private $sex;
    private $age;

    //__set()方法用来设置私有属性
    function __set($property_name, $value) {
        echo "在直接设置私有属性值的时候,自动调用了这个 __set() 方法为私有属性赋值<br />";
        $this->$property_name = $value;
    }
    //__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() 方法:

private function __isset($property_name)
{
    return isset($this->$property_name);
}

这样当在类外部使用 isset() 函数来测定对象里面的私有成员是否被设定时,就会自动调用 __isset() 方法来检测。

__unset()

__unset() 方法用于删除私有属性。

同 isset() 函数一样,unset() 函数只能删除对象的公有成员属性,当要删除对象内部的私有成员属性时,需要使用__unset() 方法:

private function __unset($property_name)
{
    unset($this->$property_name);
}

  • __set() 方法用于设置私有属性值。
  • __get() 方法用于获取私有属性值。
  • __isset() 方法用于检测私有属性值是否被设定。
  • __unset() 方法用于删除私有属性。

实际应用中,经常会把类的属性设置为私有(private),那么需要对属性进行访问时,就会变得麻烦。虽然可以将对属性的访问写成一个方法来实现,但 PHP 提供了一些特殊方法来方便此类操作。

__set()

__set() 方法用于设置私有属性值:

function __set($property_name, $value)
{
    $this->$property_name = $value;
}

在类里面使用了 __set() 方法后,当使用 $p1->name = "张三"; 这样的方式去设置对象私有属性的值时,就会自动调用 __set() 方法来设置私有属性的值。

__get()

__get() 方法用于获取私有属性值:

function __set($property_name, $value)
{
    return isset($this->$property_name) ? $this->$property_name : null;
}

例子:

<?php
class Person {
    private $name;
    private $sex;
    private $age;

    //__set()方法用来设置私有属性
    function __set($property_name, $value) {
        echo "在直接设置私有属性值的时候,自动调用了这个 __set() 方法为私有属性赋值<br />";
        $this->$property_name = $value;
    }
    //__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() 方法:

private function __isset($property_name)
{
    return isset($this->$property_name);
}

这样当在类外部使用 isset() 函数来测定对象里面的私有成员是否被设定时,就会自动调用 __isset() 方法来检测。

__unset()

__unset() 方法用于删除私有属性。

同 isset() 函数一样,unset() 函数只能删除对象的公有成员属性,当要删除对象内部的私有成员属性时,需要使用__unset() 方法:

private function __unset($property_name)
{
    unset($this->$property_name);
}
时间: 2024-10-06 03:26:31

PHP 特殊方法 __set()、__get()、__isset() 与 __unset()的相关文章

php __set __get __isset __unset用法防被忽悠分析

大家好我是小烟  今天分享下 php面向对象中__set __get __isset __unset用法之防忽悠介绍 全文注意===================================== __set __get __isset __unset  这些方法 老版本php是可以设置成私有的 但是现在php版本 最好不要设置成私有 更不能设置成静态 设置成静态方法直接就出错了  设置成私有的话 虽然能正常返回值 但是会有个 Warning 警告!!(本人是php5.5版本) 正文开始==

php __set() __get() __isset() __unset()四个方法的应用

_set() __get() __isset() __unset()四个方法的应用 一般来说,总是把类的属性定义为private,这更符合现实的逻辑.但是,对属性的读取 和赋值操作是非常频繁的,因此在PHP5 中,预定义了两个函数“__get()”和“__set()”来获 取和赋值其属性,以及检查属性的“__isset()”和删除属性的方法“__unset()”. 上一节中,我们为每个属性做了设置和获取的方法,在PHP5 中给我们提供了专门为属 性设置值和获取值的方法,“__set()”和“__

php魔术方法__SET __GET

__SET  设置一个不可访问的属性的时候 调用_set方法 __GET 获取一个不可访问的属性的时候  调用_get 方法 <?php class stu{ private $a; private $b = 0; public $c; public $d = 0; //这里的 private 可以用 protected public 替代 private function __get($name) { return 123; } //这里的 private 也可以用 protected pub

PHP面向对象(OOP):__set(),__get(),__isset(),__unset()四个方法的应用

一般来说,总是把类的属性定义为private,这更符合现实的逻辑.但是, 对属性的读取和赋值操作是非常频繁的,因此在PHP5中,预定义了两个函数”__get()”和”__set()”来获取和赋值其属性,以及检查属性 的”__isset()”和删除属性的方法”__unset()”. 上一节中,我们为每个属性做了设置和获取的方法,在PHP5中给我们提供了专门为属性设置值和获取值的方法,”__set()”和 “__get()”这两个方法,这两个方法不是默认存在的, 而是我们手工添加到类里面去的,像构造

php--opp--10.__set(),__get(),__isset(),__unset()四个方法的应用

一般来说,总是把类的属性定义为private,这更符合现实的逻辑.但是, 对属性的读取和赋值操作是非常频繁的,因此在PHP5中,预定义了两个函数”__get()”和”__set()”来获取和赋值其属性,以及检查属性的”__isset()”和删除属性的方法”__unset()”. 上一节中,我们为每个属性做了设置和获取的方法,在PHP5中给我们提供了专门为属性设置值和获取值的方法,”__set()”和“__get()”这两个方法,这两个方法不是默认存在的, 而是我们手工添加到类里面去的,像构造方法

__set(),__get() 魔术方法示例

<?php class Ren{private $name;private $age;private $sex;function __set($name,$value){ if($name == "age") { if($value < 50 && $value > 10) { $this->$name = $value; } } else { $this->$name = $value; }}function __get($name){

PHP面向对象魔术方法之__get 和 __set函数

l 基本的介绍 (1) 当我们去使用不可以访问的属性时,系统就会调用__get方法. (2) 不可以访问的属性指的是(1 . 该属性不存在 2. 直接访问了protected或者private属性) (3) 当程序员去给不可以访问的属性直接赋值,系统就会调用__set方法 l 举例说明 需求是: 如果对象有一个成员变量是private.protectd的,我希望在在类的外部通过 : $对象名->变量名的方式来赋值和取值,怎么办? 代码如下 <?php header('content-type:

php对象:__autoload()函数及单入口文件,__set(), __get(), get_class_methods(),get_class_vars()

__autoload():当类中找不到相关类的时候,会自动执行__autoload()函数,可以自动加载相关文件 __set() : 当对类的私有变量进行调用赋值时,自动调用该方法. __get() : 在外部获得类的私有属性时,自动调用该方法. get_class_methods(): 获取类的方法 get_class_vars(): 获取类的属性 传入类名,返回数组 私有变量外部能不能访问 来自为知笔记(Wiz)

isset和empty,isset和unset,__isset和__unset

1.isset() 用来检测变量是否存在,如果变量存在,且值不等于零,返回ture empty() 用来检测师傅为空,如果变量值值为"".0."0".NULL..FALSE.array().var $var; 以及没有任何属性的对象,则返回 ture 2.issert和unset, isset我们都知道了,我们来看unset, unset来销毁对象的属性, 但是,这种方法只能用来销毁公开权限的属性,如果是私有的或者受保护的属性又怎么办呢? 那就是接下来的__isse