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();
  • 相关阅读:
    Calling a parent window function from an iframe
    JSON with Java
    Posting array of JSON objects to MVC3 action method via jQuery ajax
    What's the difference between jquery.js and jquery.min.js?
    jquery loop on Json data using $.each
    jquery ui tabs详解(中文)
    DataTables warning requested unknown parameter
    Datatables 1.10.x在命名上与1.9.x
    jQuery 1.x and 2.x , which is better?
    DataTabless Add rows
  • 原文地址:https://www.cnblogs.com/xiaofox0018/p/5993234.html
Copyright © 2011-2022 走看看