php菜鸟提问~面向对象里的对私有字段成员的赋值取值操作时采用拦截器……

一句话写不完了。
菜鸟一个,今早刚看的视频教程。看的是李炎恢视频教程第二季,面向对象特性关于封装的部分。
有个疑问:php面向对象里的对私有字段成员的赋值取值操作时采用拦截器后,类外对私有字段进行赋值取值跟公有字段没区别了,这样对设置私有字段不就没意义了么,还不如直接设置公有字段???
最新回答
独白

2026-10-29 17:40:33

现在,老师只是给你看了个 简单的例子


实际用途中,是很有用的,比如你需要传入大量的变量 或者 你需要赋值的变量需要进行安全判断或者类型判断等。  下面是一个简单的例子,希望可以帮到你

class cla {
    
    private $a = array();
    
    public function __set($key, $value) {
        $this->a[$key] = $value;
    }
    
    public function __get($key) {
        
        return $this->a[$key];
    }
}

$cla = new cla();

$cla->b1 = 'b1';
$cla->b2 = 'b2';

echo $cla->b1;
echo '<br>';
echo $cla->b2;

这个代码  在很多接口调用中,经常用到

梦中你是主角

2026-04-21 23:01:08

<?php
/*
@在php5面向对象类的属性定义为private,这更符合现实的逻辑。
@但是,对属性的读取和赋值操作是非常频繁的,
@因此在PHP5中,预定义了两个函数“__get()”和“__set()”来获取和赋值其属性,
以及检查属性的“__isset()”和删除属性的方法“__unset()”。
有了__get()”和“__set(),我们就可以暗箱操作了,也就是“第三只手”
*/
__get()”和“__set()
class father{
    private $sonNname;
    
    function __get($protectName){
       if(md5($this->sonName)==$protectName) 
       return "你是我儿子";
       else
       return "亚美蝶";
    }
     function __set($protectName,$protectValue){
         //更多富有激情的代码 随你敲
     }
}
客串情人

2026-01-11 20:02:21

这个楼上讲得很好。确实就是这么个用意,只是你那个代码,老师把代码简化了,你看上去和定义一个PUBLIC的没什么区别。