找回密码
 立即注册
搜索
查看: 1862|回复: 0

[面向对象] 【OOP代码示例】封装性

[复制链接]

581

主题

110

回帖

4066

积分

管理员

积分
4066

众神之神

发表于 2016-1-27 17:42:35 | 显示全部楼层 |阅读模式
设置私有成员与私有成员的访问
  1. <?php
  2. class person{

  3.     public $name = "zhangsan";       //公有的
  4.     private $age = 18;       //私有的
  5.     protected $sex = 'nan';     //受保护的
  6.     //var $height;        //如果不确定使用哪种封装,就先用var 来修饰。

  7.     //私有的成员方法 不能在类的外部直接访问
  8.     private function getName(){
  9.         return $this -> name;
  10.     }

  11.     //受保护的成员方法 不能在类的外部直接访问
  12.     protected function getAge(){
  13.         return $this -> age;
  14.     }

  15.     //公有的成员方法 可以在类的外部直接访问
  16.     public function getSex(){
  17.         return $this -> sex;
  18.     }

  19.     //私有的,公有的,受保护的成员方法都可以在类的内部直接访问
  20.     public function say(){
  21.         return $this -> getName().$this->getAge().$this->getSex();
  22.     }
  23. }

  24. $person = new person();
  25. echo $person -> name;  //公有的是可以在类的外部直接访问
  26. echo "<hr />";
  27. //echo $person -> age;      //私有的是不能在类的外部直接访问
  28. echo "<hr />";
  29. //echo $person -> sex;      //受保护的也是不能在类的外部直接访问
  30. //$person -> getName();
  31. //$person -> getAge();
  32. //echo $person -> getSex();
  33. echo $person -> say();
复制代码
魔术方法__set()
  1. <?php
  2. class person{
  3.     private $name;
  4.     protected $age;

  5.     public function set($name,$value){

  6.         $this -> $name = $value;
  7.     }

  8.     //魔术方法__set() 是在给私有的或受保护的成员属性在类的外部直接赋值时被自动调用
  9.     //第一个参数:要赋值的成员属性名
  10.     //第三个参数:要赋的值
  11.     //作用:可以更好的对程序进行控制
  12.     public function __set($name,$value){
  13.         if($name == 'age' && $value > 30){
  14.             $this -> $name = $value - 5;
  15.         }else{
  16.             $this -> $name = $value;
  17.         }
  18.     }
  19. }

  20. $person = new person();
  21. //$person -> set("name","zhangsan");
  22. //$person -> set("age",18);
  23. $person -> name = "lisi";
  24. $person -> age = 31;
  25. var_dump($person);
复制代码
魔术方法__get()
  1. <?php
  2. class person{
  3.     private $name;
  4.     protected $age;

  5.     public function __construct($name,$age){
  6.         $this -> name = $name;
  7.         $this -> age = $age;
  8.     }

  9.     public function get($name){
  10.         return $this -> $name;
  11.     }

  12.     //魔术方法__get() 是在类的外部直接得到私有的或受保护的成员属性时被自动调用
  13.     //参数:要访问的成员属性名
  14.     //作用:可以得到私有的或受保护的成员属性。也可以对返回的结果进制控制
  15.     public function __get($name){
  16.         if($name == 'age'){
  17.             return 18;
  18.         }
  19.         return $this -> $name;
  20.     }
  21. }

  22. $person = new person("zhangsan",20);
  23. //echo $person -> age;
  24. //echo $person -> get("name");
  25. //echo "<hr />";
  26. //echo $person -> get("age");
  27. echo $person -> name;
  28. echo "<hr />";
  29. echo $person -> age;
复制代码
魔术方法__isset()
  1. <?php

  2. class person{
  3.     private $name;
  4.     protected $age;

  5.     public function __construct($name,$age){
  6.         $this -> name = $name;
  7.         $this -> age = $age;
  8.     }

  9.     public function is_set($name){
  10.         return isset($this -> $name);
  11.     }

  12.     //魔术方法 __isset() 是在类的外部用函数isset()判断私有的或受保护的成员属性时被自动调用
  13.     //参数:判断的成员属性名
  14.     //作用:可以按需求去返回false 或true
  15.     public function __isset($name){
  16.         if($name == 'age'){
  17.             return false;
  18.         }
  19.         return isset($this -> $name);
  20.     }
  21. }

  22. $person = new person("zhangsan",20);
  23. var_dump(isset($person -> name));
  24. var_dump(isset($person -> age));
  25. //
  26. var_Dump($person -> is_set("name"));
  27. var_dump($person -> is_set("age"));
复制代码
魔术方法__unset()
  1. <?php
  2. class person{
  3.     private $name;
  4.     protected $age;

  5.     public function __construct($name, $age){
  6.         $this -> name = $name;
  7.         $this -> age = $age;
  8.     }

  9.     public function un_set($name){
  10.         unset($this -> $name);
  11.     }

  12.     //魔术方法__unset() 是在类的外部用函数unset()释放私有的或受保护的成员属性时被自动调用
  13.     //参数:要释放的成员属性名
  14.     //作用:可以按需求控制成员属性的释放操作
  15.     public function __unset($name){
  16.         if($name == 'name'){
  17.             return;
  18.         }
  19.         unset($this -> $name);
  20.         
  21.     }

  22. }

  23. $person = new person("zhangsan",20);
  24. unset($person -> name);
  25. unset($person -> age);
  26. //$person -> un_set("name");
  27. //$person -> un_set("age");
  28. var_dump($person);
复制代码


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|十三博客 ( 鲁ICP备2023000528号 )

GMT+8, 2026-6-1 17:27 , Processed in 0.069363 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表