面向对象基础和面向对象的三大特性之一:封装(20161024)
Posted 5572
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象基础和面向对象的三大特性之一:封装(20161024)相关的知识,希望对你有一定的参考价值。
面向对象
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题文档</title> </head> <body> <?php //定义数组 /*$attr = array(); echo $attr;*/ //$attr[0] = 1; //索引数组 //$attr = array(1,2,3,4); //关联数组 //$attr = array("code"=>"p001","name"=>"张三"); //二维数组 /*$attr = array( array(), array() );*/ //数组遍历 //for循环遍历 /*for($i=0;$i<count($attr);$i++) { $attr[$i]; }*/ //foreach遍历 /*foreach($attr as $v) { $v; } foreach($attr as $k=>$v) { $k;$v; }*/ //$attr = array(1,2,3,4,5,2); /* 放在别的语言里面foreach遍历数组和集合的情况下不能删除和添加内容 foreach($attr as $k=>$v) { if($v==3) { unset($attr[$k]);//删除元素 } } $attr = array_values($attr); //重新索引 var_dump($attr);*/ //each()和list()方法遍历 //var_dump(each($attr)); //list($a,$b)=$attr; 取前两个 //echo $b; //指针遍历 //echo current($attr); //echo key($attr); //next($attr); //prev($attr); //end($attr); //reset($attr); //var_dump(in_array(9,$attr));//判断某一个值是否在数组里面存在 //var_dump(array_reverse($attr));//翻转数组 //var_dump(array_unique($attr)); //去重 //var_dump(array_count($attr));//取数组长度 //unset($arr[0])//删除数组的某个值 //array_values($arr)//重新索引 //$attr1 = array(9,10); //var_dump(array_merge($attr,$attr1));//合并数组 //array_push($attr,10); //添加元素到数组,返回值不是新的数组 //var_dump($attr); //$attr[]=11; //添加元素到数组 //var_dump($attr); //面向对象 //面向过程 //$a = 10; //$b = 15; //echo $a+$b; //面向对象 //1.什么叫做对象 //一切皆为对象 //2.什么叫做类 //由众多对象的抽象 //做类 /*class Ren // class 类名(首字母大写) class是用来定义类的 { //通过变量和方法来描述人类的特征 //成员变量和成员方法总和起来叫做类的成员 //成员变量 类里面的普通成员是属于对象的 public $name; public $sex; //构造方法 function __construct($n) //统一的构造方法名 { //$sex = $n; //错误 public $sex;里的$sex是类的、抽象的,这里的$sex是对象的、具体的 //$this关键字,在类里面代表该对象,谁用就代表谁 $this->sex =$n; //正确 } //成员方法 public function Speak() { echo "正在讲话"; } } $r = new Ren("男"); //实例化对象 对对象初始化 //object 类,对象 var_dump($r); $r1 = new Ren("女"); var_dump($r1);*/ //构造方法,始终存在,如果不写也是存在的 //var_dump($r); //$r->name = "李四"; //赋值 其他语言都是点 //echo $r->name; //取值 //var_dump($r); //$r->Speak(); //$r1 = new Ren(); //实例化对象 //$r1->name = "数据"; //var_dump($r==$r1); //每一个对象都是一个独立的个体,都不一样 //访问修饰符 //public:代表公有的,在任何地方都可以访问 //protected:代表受保护的,只能在该类或该类的子类中访问 //private:代表私有的,只能在该类中访问 ?> </body> </html>
封装
研究一个类,要先看它的构造方法
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题文档</title> </head> <body> <?php class Ren { private $name; private $sex; private $age; //年龄必须在18-50之间 function __construct($v)//构造方法 { $this->sex = $v; } //魔术方法 以双下划线打头 //魔术方法set function __set($n,$v)//成员变量的名称,成员变量的值 { if($n=="age") { if($v>=18 && $v<=50) { $this->$n = $v; } } else { $this->$n = $v; } } //魔术方法get function __get($n) { return $this->$n; } /*//设置age的值 function setage($a) { if($a>=18 && $a<=50) { $this->age = $a; } } //获取age的值 function getage() { return $this->age; }*/ function say() { echo "hello"; } //析构方法 在对象释放的时候执行,自动调用;如果连接数据库的话,可以在里面写断开连接 function __destruct() { echo "这是一个析构方法"; } function __tostring() { return "这个类是人类"; //可以用来输出对象,比如介绍功能 } } $r = new Ren("男"); //$r->setage(20); //echo $r->getage(); $r->say(); //$r->age = 30; 等价于 $r->__set("age",20); //echo $r->age; //$r->__get("age"); //$r->__set("age",20); var_dump($r); //构造方法:写法特殊,执行时间特殊 //OOP(面向对象)三大特性:封装,继承,多态 //封装的目的:为了让类更安全 //封装的做法: //1.类里面的成员变量做为private //2.使用成员方法来间接访问成员变量 //3.在该方法里面加限制条件 //php类里面不允许出现同名方法,但是 //函数重载 //在类里面写多个同名方法来实现不同功能 /*public string Show() { return "显示"; } public string Show(string a) { return a+"显示"; } public string Show(string a,string b) { return a+b+"显示"; } public string Show(int b) { return b+"数字"; }*/ //1.函数名必须相同 //2.参数个数不同或参数类型不同 //例子:求两个圆之间的阴影面积 /*$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); $r2 = new Yuan(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(); ?> </body> </html>
以上是关于面向对象基础和面向对象的三大特性之一:封装(20161024)的主要内容,如果未能解决你的问题,请参考以下文章