zoukankan      html  css  js  c++  java
  • php学习笔记[php中面向对象三大特性之一[封装性]的应用]

    简介:这是php学习笔记------[php中面向对象三大特性之一[封装性]的应用]的详细页面,介绍了和php,有关的知识、技巧、经验,和一些php源码等。

    class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=338320' scrolling='no'>
    <?php
    /*
     * 封装性:面向对象三大特性之一
     *
     * 1.就是把对象的成员(属性,方法)结合成一个独立的相同单位,并尽可能隐藏对象的内部细节
     *   访问权限修饰符  public protected private
     *   private:私有的,用这个关键字修饰的成员,只能在对象内部访问(只有用$this访问)
     *  
     *  属性可以封装:
     *  		只要一个变量,需要在多个方法使用,就将这个变量声明为成员属性,可以直接在这个对象中的所有方法中使用
     *
     *  		成员属性,相当于这个对象中的全局变量
     *
     *  		成员属性都会在方法中使用,成员属性值的变化其实就是在改变方法的执行行为,也就是改变了对象的功能
     *
     *  		成员属性的值如果不正常,方法执行的功能叶就不正常 
     *  		
     *  		作用:不需要在对象外部改变或读取它的值
     *  			1.封装
     *  			 再提供一个公有的方法(经过方法对对象成员属性进行赋值和取值就可以控制)
     *
     *
     *  方法也可以封装
     *
     *  	作用:
     *  		1.使用private修饰使其只能在内部使用
     *
     *  		2.一个类中有100个方法,封装了95个(为另外5个服务的方法),只有5个方法可以使用
     *
     *  	100个成员属性,都让取值,不可以改值;或者只可改值,不可获取值//此种情况下使用以下方法比较方便 
     *  	和封装有关的魔术方法:
     *
     *		__set();//是直接设置[私有的]成员属性值时,自动调用的方法
     *		__get();//是直接获取[私有的]成员属性值时,自动调用的方法
     *		__isset();//是直接使用isset()查看对象中私有属性是否存在时,自动调用这个方法
     *		__unset();//是直接使用unset()删除对象中私有属性时,自动调用的方法
     *
     *
     *
     *
     *
     *
     *
     */
    class Person{
    
    		//x封装成员属性,不需要在对象外部改变
    		private $name;
    		private $age;
    		private $sex;
    
    
    		private __unset($proName){
    			unset($this->$proName);
    		
    		}
    
    
    		//是直接查看对象中私有属性是否存在时,自动调用这个方法
    		//__isset($proName)的使用,$proName代表属性名
    		private function __isset($proName){
    			return isset($this->$proName);//isset()返回是否存在
    		}
    
    		function __construct($name,$age,$sex){
    			$this->name=$name;
    			$this->age=$age;
    			$this->sex=$sex;
    
    		}
    
    		
    		//当获取私有的成员属性时,自动调用此方法
    		private function __get($proName)
    		{
    			//控制所获取的值
    			if($proName=="age"){
    				if($this-age>40)
    					return $this->age-10;
    			}
    			return $this->$proName;
    		}
    
    		//当设置私有的成员属性时,自动调用此方法
    		private function __set($proName,$proValue){
    			//$proName表示成员属性名,$proValue表示成员属性值
    			//控制设置范围
    			if($proName=="age"){
    				if($proValue > 100 || $proValue<0)
    					return;
    			}
    			$this->$proName=$proValue;
    
    			
    		}
    
    		//提供公有方法来设置成员属性的值
    		function setAge($age){
    			//控制年龄范围,增加安全性
    			if($age > 100 || $age < 0 )
    				return;
    			$this->age=$age;
    		}
    		
    		//提供公有方法来获取成员属性的值
    		function getAge(){
    			//控制获取年龄的范围
    			if($this->age < 30)
    				return $this->age;
    			else if($this->age<40)
    				return $this->age-5;
    			else if($this->age<50)
    				return $this->age;
    			else
    				return $this->age-15;
    提供公有方法来		}
    
    		function say(){
    			echo "我的名字:{$this->name},我的年龄:{$this->age},我的姓别:{$this->sex}<br>";
    
    			//访问封装过的 run()方法
    			$this-run();
    		}
    
    		private function run(){
    			echo '111111111111<br>'
    
    		}
    
    		function eat(){
    
    		}
    
    		//析构方法
    		function __destruct(){
    
    		}
    	}
    
    $p1=new Person("zhangsan",25,"男");
    $p2=new Person;
    $p3=new Person;
    //$p1->age=-50;//因为年龄在外部随意访问,所以成员属性药封装,才有安全性。
    $p1->setAge(30);//通过方法来设置成员属性德值
    $p1->getAge();//通过方法来获取成员属性德值
    
    //通过添加家魔术方法__set($proName,$proValue) __get($proName),就可以直接调用成员属性了
    
    
    $p1->say();//可以调用
    $p1->run();//私有的方法不能直接调用
    
    //删除$p1里面的name
    unset($p1->name);
    
    //判断name是否存在
    if(isset($p1->name)){
    
    	echo "存在<br>";
    }else{
    	echo "没有这个成员 <br>";
    }
    
    
    
    ?>

    爱J2EE关注Java迈克尔杰克逊视频站JSON在线工具

    http://biancheng.dnbcw.info/php/338320.html pageNo:8
  • 相关阅读:
    postfix队列管理
    fdisk添加磁盘
    postfix日志分析pflogsumm
    ioctl接口内容操作
    linux 路由表设置 之 route 指令详解
    手把手教你用 Strace 诊断问题
    rtsp学习----海康RTSP客户端连接深入分析
    栈回溯技术
    objdump命令
    linux中的strip命令简介------给文件脱衣服
  • 原文地址:https://www.cnblogs.com/ooooo/p/2246228.html
Copyright © 2011-2022 走看看