Rumah pembangunan bahagian belakang tutorial php php中__get()和__set()用法介绍_PHP教程

php中__get()和__set()用法介绍_PHP教程

Jul 13, 2016 pm 05:14 PM
get php set memperkenalkan dan objek harta benda Bandingkan penggunaan daripada sediakan kelakuan

想要对对象的属性进行一些设置,如果一个一个设置,会比较麻烦,这时可以使用对象的处理器函数__get()和__set(),不过使用这两个方法的前提,属性需要是protect或private的,如下例:

 代码如下 复制代码

 class Person
{
 private $__data = array();
 
 public function __get($property)
 {
  if (isset($this->__data[$property]))
  {
   return $this->__data[$property];
  }
  else
  {
   return false;
  }
 }
 
 public function __set($property, $value)
 {
  $this->__data[$property] = $value;
 }
}

__set()和__get()方法是针对protect或private属性的,这样可以做到在外界不能直接访问属性,而通过public定义的__set()和__get()方法却可以轻易访问它,同事这两个方法对属性的操作通用性也比较高,也可以限制对象的属性的合法性,只有属于$__data数组中的属性,才可以进行设置,可以防止外界直接对属性进行设置。但是使用__set()和__get()也有些不足之处。第一,这两个方法只会捕捉私有或受保护的属性,即是外界没有访问权限的属性,这样php会报一个致命错误;第二,这两个方法破坏了属性的继承性。如果父对象中有一个__set()方法,而在子类中又实现了自己的__get()方法,那么对象就不会正常的运行,因为父对象的__get()方法是永远调不到的,而且要想检测重写的属性是否存在也不能得到的,因为它不会调用__get()方法。见到有人通过实现__isset()和__unset()来解决上面的问题。代码如下:

 

 代码如下 复制代码
 public function __isset($property)
{
 if (isset($this->data[$property]))
 {
  return true;
 }
 else
 {
  return false;
 }
}
 
public function __unset($property)
{
 if (isset($this->data[$property]))
 {
  return unset($this->data[$property]);
 }
 else
 {
  return false;
 }
}

使用__isset()和__unset()则能保证属性是否真正存在,不过这两个方法只有在PHP5.1后才有效。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/628952.htmlTechArticle想要对对象的属性进行一些设置,如果一个一个设置,会比较麻烦,这时可以使用对象的处理器函数__get()和__set(),不过使用这两个方法的前...
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Dec 24, 2024 pm 04:42 PM

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian

Tarikh dan Masa CakePHP Tarikh dan Masa CakePHP Sep 10, 2024 pm 05:27 PM

Tarikh dan Masa CakePHP

Konfigurasi Projek CakePHP Konfigurasi Projek CakePHP Sep 10, 2024 pm 05:25 PM

Konfigurasi Projek CakePHP

Muat naik Fail CakePHP Muat naik Fail CakePHP Sep 10, 2024 pm 05:27 PM

Muat naik Fail CakePHP

Penghalaan CakePHP Penghalaan CakePHP Sep 10, 2024 pm 05:25 PM

Penghalaan CakePHP

Bincangkan CakePHP Bincangkan CakePHP Sep 10, 2024 pm 05:28 PM

Bincangkan CakePHP

Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Dec 20, 2024 am 11:31 AM

Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP

Panduan Ringkas CakePHP Panduan Ringkas CakePHP Sep 10, 2024 pm 05:27 PM

Panduan Ringkas CakePHP

See all articles