zoukankan      html  css  js  c++  java
  • 10月24日下午PHP封装

    class Ren
    {
        private $name;
        private $sex;
        private $age;//年龄必须在18-50岁之间
        
        function __construct($n)
        {
            $this->sex = $n;
        }
        //设置age的值
        function setage($a)
        {
            if($a>=18 && $a<=50)
            {
                $this->age = $a;
            }
        }
        //获取age的值
        function getage()
        {
            return $this->age;
        }
        
        function _destruct()
        {
            echo"这是一个析构方法";
        }
    
    }
    $r = new Ren("男");
    
    $r->setage(20);
    
    echo $r->getage();
    
    var_dump($r);
    
    //封装目的:为了让类更加的安全
    //封装的做法:
    //1.类里面的成员变量全部做为private
    //2.使用成员方法来间接访问成员变量
    //3.在该方法里面加限制条件

    按照上面的方法用起来很不方便,一个变量要写两个函数,如果变量较多时,要写的函数会更多。

    PHP里面有个方法是function __set();

    class Ren
    {
        private $name;
        private $sex;
        private $age;//年龄必须在18-50岁之间
        
        function __construct($n)
        {
            $this->sex = $n;
        }
        function __set($n,$v)//可以给成员变量赋值,括号里面有两个参数,第一个参数是成员变量的名称,第二个是成员变量的值。
        {
            $this->$n = $v;
        }
    }
    $r = new Ren("男");
    //$r->__set("age",20);//按照这种写法还是会比较复杂,每一个都需要写名字。按照下列写法写。
    $r->age = 20;
    var_dump($r);
    
    __set方法特殊在可以自动调用,在给成员变量赋值的时候自动调用function __set($n,$v),把age传给$n,把20传给$v
    上面的只能调用这个方法赋值,没有限制条件,下面代码是封装的最终形式。
    class Ren
    {
        private $name;
        private $sex;
        private $age;//年龄必须在18-50岁之间
        
        function __construct($n)
        {
            $this->sex = $n;
        }
        function __set($n,$v)
        {
            if($n=="age")
            {
                if($v>=18 && $v<=50)
                {
                    $this->$n = $v;
                }    
            }
            else
                {
                    $this->$n = $v;
                }
        }
    }
    $r = new Ren("男");
    $r->__set("age",20);
    var_dump($r);
    
    一个类里面一个set就够了,如果成员变量多的话可以使用switch...case

    类里面的所有的双下划线的有一个统称,叫做魔术方法。

    function __get()

    class Ren
    {
        private $name;
        private $sex;
        private $age;//年龄必须在18-50岁之间
        
        function __construct($n)
        {
            $this->sex = $n;
        }
        function __set($n,$v)//可以给成员变量赋值,括号里面有两个参数,第一个参数是成员变量的名称,第二个是成员变量的值。
        {
            if($n=="age")
            {
                if($v>=18 && $v<=50)
                {
                    $this->$n = $v;
                }    
            }
            else
                {
                    $this->$n = $v;
                }
        }
        function __get($n)
        {
            return $this->$n;
        }
    }
    $r->age = 40;
    echo $r->age;//这么写会直接调用get方法。把变量名age传到get里面去
    //例子:求两个圆之间的阴影面积
    
    //面向过程的方式:
    
    /*$maxr = 20;
    $minr = 10;
    $mj = 3.14*$maxr*$maxr - 3.14*$minr*$minr;
    
    //面向对象的方式:
    class Yuan//研究的是圆,类就是圆。
    {
        //代表半径
        public $r;//圆的属性中有半径
        
        function __construct($n)//构造函数
        {
            $this->r = $n;//给圆的半径赋上取到的值
        }
        
        //求面积的方法
        function MJ()//方法  求圆的面积的通用公式
        {
            return 3.14*$this->r*$this->r;
        }
    }
    
    $r1 = new Yuan(20);//圆1的半径是20
    $r2 = new Yuan(10);//圆2的半径是10
    
    $mianji = $r1->MJ()-$r2->MJ();*/
    //例子:计算器
    面向过程的方式:
    $a = 10;
    $b = 5;
    
    $jia = $a+$b;
    $jian = $a-$b;
    $cheng = $a*$b;
    $chu = $a/$b;
    
    面向过程的方式:
    class jisuan
    {
        public $a;
        public $b;
        
        function __construct($n,$m)
        {
            $this->a = $n;
            $this->b = $m;
        }
        
        function jia()
        {
            return $this->a+$this->b;
        }
        function jian()
        {
            return $this->a-$this->b;
        }
        function cheng()
        {
            return $this->a*$this->b;
        }
        function chu()
        {
            return $this->a/$this->b;
        }
        function quyu()
        {
            return $this->a%$this->b;
        }
    }
    
    $j = new jisuan(10,5);
    $j->quyu();
  • 相关阅读:
    Backbone中的model和collection在做save或者create操作时, 如何选择用POST还是PUT方法 ?
    Spring boot: Request method 'DELETE' not supported, Request method 'PUT' not supported, Request method 'POST' not supported
    Backbone.js 中的Model被Destroy后,不能触发success的一个原因
    eclipse里打开SWT项目找不到source/design的图形UI设计界面
    RHEL5.6配置本地yum源
    Linux环境下Apache反向代理金蝶中间件Apusic集群
    Linux环境下源码安装Apache2.2.25
    WIN7中Beyond Compare报错误“应用程序发生错误” 无法启动
    使用Navicat迁移MySQL数据至Oracle时大小写原因报“表或视图不存在”问题处理
    -Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variable and mvn script match问题处理
  • 原文地址:https://www.cnblogs.com/xiaofox0018/p/5993234.html
Copyright © 2011-2022 走看看