当声明属性的时候用到了private,那么的话只能本类中才能访问此属性,其他地方无法使用,这个时候需要给外界提供一些方法来使外界访问
方法一:存取器:
可以提供一个public的方法来使外界对类里面的属性进行访问和赋值
class Student { private $name; private $age; public function show(){ echo "{$this->name}今年{$this->age}岁了"; } /*****存取器:get,set******/ /****提供set方法给外界赋值***/ public function setName($name){ $this->name=$name; } public function setAge($age){ if($age<0){ $this->age = "18"; }else{ $this->age=$age; } } /******提供get方法给外界取值**********/ public function getName(){ return $this->name; } public function getAge(){ return $this->age; } }
实例化的代码:
$stu = new Student(); /*****不能直接访问,需要用类里面的set,get方法来访问******/ $stu->setName("房明"); echo $stu->getName(); $stu->setAge(-18); echo $stu->getAge(); $stu->show();
方法二:魔术方法进行访问
在php中文诶我们提供了许多的魔术方法,在这里我们只要是某某一个魔术方法就可以完成我们想要的效果
*__set():赋值* __get():取值* __isset():是否有这个属性* __unset():销毁某个属性 代码如下:
class User { private $name; private $age; /*****__set():赋值****/ function __set($name,$value) { if($name == "age"){ if($value <18){ $this->age = 18; }else{ $this->age = $value; } }else{ $this->$name = $value; } } /****__get():取值***/ function __get($name) { if($name == "name"){ return "dog"; }else{ return $this->$name; } } /***** __isset():是否有这个属性****/ //当当前属性被isset()或者empty(),即当某个属性被检验空的方法调用的时候,会触发这个方法 function __isset($name) { echo "{$name}isset被调用了"; } /*******__unset():销毁某个属性******/ // function __unset($name) { echo "{$name}被销毁了"; //防止被销毁的时候直接写一个return即可; } public function show(){ echo "{$this->name}今年{$this->age}岁了"; } }
魔术方法进行访问:
$user = new User(); $user->name = "房明"; $user->age = 10; echo $user->name; echo $user->age; $user->show(); isset($user->name); unset($user->name);
时间: 2024-10-10 06:05:19