/* PHP面向对象的程序设计
*
* PHP5
*
* 数组和对象:都属于PHP的复合类型(一个变量可以存储多个单元)
*
* 对象比数组更强大,不仅可以存储多个数据,还可以将函数存在对象中
*
* 对象的三大特性:封装、继承、多态
*
* 面向对象编程(oop) //符合软件工程中的 重用性 灵活性 扩展性
*
* 面向对象和面向过程之间的区别
*
* 最小的单位:函数 //面向过程
* 最小的单位:对象 //面向对象
*
* 什么是对象
近来,新浪管理层开始套现,公开消息披露,当年的MBO使得管理层意气风发地成为新浪第一大股东,可到今天,他们已经成为了第二大股东。股权比例相距倒是不大:和第一大股东FMR9.24%的比例只有0.1%的差距。但新浪管理层手上有约定出售股权的协议,如果算上这部分未来可能会抛售的股权,管理层就只剩下5.74%了。新浪的确有可能再次成为一个“无主的公司”。
这就是新浪作为一家公司,未来的麻烦:盈利模型不清晰,无主的可能性又开始展现。
* 对象是一个实体
* 对象:
* 成员属性==变量//定义对象的外观和状态
* 成员方法==函数//定义对象的功能
*
* 什么是类
* 分类、类型、自定义类型
*
* 在类中定义这个类型的属性和方法
*
* 类和对象之间的一个关系
*
* 声明类-->实例化对象(创建对象)-->使用对象
*
*
* 最难得是如何设计出面向对象的程序,而不是面向对象的语法。
*
*/
?>
原来的成员: var $name; //声明人的姓名 var $sex; //声明人的性别 var $age; //声明人的年龄 function run(){…….} 改成封装的形式: private $name; //把人的姓名使用private关键字进行封装 private $sex; //把人的性别使用private关键字进行封装 private $age; //把人的年龄使用private关键字进行封装 private function run(){……} //把人的走路方法使用private关键字进行封装 注意:只要是成员属性前面有其它的关键字就要去掉原有的关键字"var"。 通过private就可以把人的成员(成员属性和成员方法)封装上了。封装上的成员就不能被类外面直接访问了,只有对象内部自己可以访问;下面的代码会产生错误: class Person { //下面是人的成员属性 private $name; //人的名子,被private封装上了 private $sex; //人的性别, 被private封装上了 private $age; //人的年龄, 被private封装上了 //这个人可以说话的方法 function say() { echo "我的名子叫:".$this->name." 性别:".$this->sex." 我的年龄是:".$this->age."<br>"; } //这个人可以走路的方法, 被private封装上了 private function run() { echo "这个人在走路"; } } //实例化一个人的实例对象 $p1=new Person(); //试图去给私有的属性赋值, 结果会发生错误 $p1->name="张三"; $p1->sex="男"; $p1->age=20; //试图去打印私有的属性, 结果会发生错误 echo $p1->name."<br>"; echo $p1->sex."<br>"; echo $p1->age."<br>" //试图去打印私有的成员方法, 结果会发生错误 $p1->run(); 输出结果为: Fatal error: Cannot access private property Person::$name Fatal error: Cannot access private property Person::$sex Fatal error: Cannot access private property Person::$age Fatal error: Cannot access private property Person::$name Fatal error: Call to private method Person::run() from context ''
从上面的实例可以看到, 私有的成员是不能被外部访问的, 因为私有成员只能在本对象内部自己访问,比如,$p1这个对象自己想把他的私有属性说出去,在say()这个方法里面访问了私有属性,这样是可以。(没有加任何访问控制,默认的是public的,任何地方都可以访问)
//这个人可以说话的方法, 说出自己的私有属性,在这里也可以访问私有方法
function say() { echo "我的名子叫:".$this->name." 性别:".$this->sex." 我的年龄是:".$this->age."<br>"; //在这里也可以访问私有方法 //$this->run(); }
因为成员方法say()是公有的, 所以我们在类的外部调用say()方法是可以的,改变上面的代码;
class Person { //下面是人的成员属性 private $name; //人的名子,被private封装上了 private $sex; //人的性别, 被private封装上了 private $age; //人的年龄, 被private封装上了 //定义一个构造方法参数为私有的属性姓名$name、性别$sex和年龄$age进行赋值 function __construct($name, $sex, $age) { //通过构造方法传进来的$name给私有成员属性$this->name赋初使值 $this->name=$name; //通过构造方法传进来的$sex给私有成员属性$this->sex赋初使值 $this->sex=$sex; //通过构造方法传进来的$age给私有成员属性$this->age赋初使值 $this->age=$age; } //这个人可以说话的方法, 说出自己的私有属性,在这里也可以访问私有方法 function say() { echo "我的名子叫:".$this->name." 性别:".$this->sex." 我的年龄是:".$this->age."<br>"; } } //通过构造方法创建3个对象$p1、p2、$p3,分别传入三个不同的实参为姓名、性别和年龄 $p1=new Person("张三","男", 20); $p2=new Person("李四","女", 30); $p3=new Person("王五","男", 40); //下面访问$p1对象中的说话方法 $p1->say(); //下面访问$p2对象中的说话方法 $p2->say(); //下面访问$p3对象中的说话方法
$p3->say();
输出结果为:
我的名子叫:张三 性别:男 我的年龄是:20
我的名子叫:李四 性别:女 我的年龄是:30
我的名子叫:王五 性别:男 我的年龄是:40
<?php class user{ private $shell ; //用户身份 这里是包含名字 和 权限的二维数组 private $ob; //模块对象 例如 财务模块 caiwu function __construct($shell){ $this->shell = $shell; } function mannger($ob){ $this->ob = new $ob($this->shell); } function qianguize(){ $this->shell[name] != '小蜜'? die('!') :''; $this->ob = new mklove($this->shell); } } class caiwu{ function __construct($shell){ if(!in_array('caiwu',$shell[quanxian])) { echo($shell[name]."你不可以管理财务哦~!<br/>"); }else{ echo $shell[name]."你可以管理财务<br/>"; } } } class mklove{ function __construct (&$shell){ if(!in_array('mklove',$shell[quanxian])) die('你不可以'); echo "www.phprm.com"; $shell[quanxian][]='caiwu'; } } /* 其中user 是用户类 caiwu ! */ $shell = array(name=> 'fs', quanxian=>array('caiwu','xingzheng','cailiao','mklove')); $shell0 = array(name=> 'f', quanxian=>array('cailiao','mklove')) ; $jingli = new user($shell) ; $xiaomi = new user($shell0) ; echo "<h4>他们分别试着去管理财务</h4><br/>"; $jingli->mannger('caiwu') ; $xiaomi->mannger('caiwu') ; echo "<h4>潜规则后的结果</h4><br/>"; $xiaomi->qianguize(); $xiaomi->mannger('caiwu') ;
本文链接:
收藏随意^^请保留教程地址.