面向对象变成的概念
需要一一种不同的方式来考虑如何构造应用程序。通过对象可以在对应用程序所处理的显示任务、过程和思想进行编码是,实施更贴切的建模。OOP方法并不是将应用程序考虑成一个将大量数据从一个函数传递给下一个函数的控制线程,而是允许将应用程序建模成一组相互协作的对象,并且这些对象可以独立的处理某些活动。
吐槽:和js挺像的
OPP的优点
可以轻松地将单个的业务需求转换为单个的代码模块。
代码重用
类的模块化
吐槽:以后问OPP的优点就这样了
opp的组成
类(class)一个对象的“蓝本”,包含定义属性和方法的实际代码
对象(object)某个类的运行实例,包含应用程序运行所需要的所有内容数据和状态信息
继承(inheritance)可以定义一种类型类为不同类型类的子类型的能力(类似于正方形是一种矩形)
多态(polymorphism)允许一个类定义为多个类范畴的成员(例如,轿车是“有引擎的食物”以及“有轮子的事物”)
接口(interface)是指这样一种做法:设定对象能够做什么,而不具体定义这些功能(如:狗和人都是“可以行走的事物”,但是行走的方式有很大的不同)
封装(encapsulation)对象就起内部数据的访问进行保护的能力
吐槽:背熟吧,骚年
然后下面开始撸代码了
<?php class Demo{ function sayHello($name){ print"Hello $name"; } } ?>
<?php require_once('class.demo.php'); $objDemo=new Demo(); $objDemo->sayHello('white') ?>
<?php class Demo{ public $name; function sayHello(){ print "Hello $this->name!"; } } ?>
<?php require_once('class.demo.php'); $objDemo=new Demo(); $objDemo->name = 'white'; $obj1Demo=new Demo(); $obj1Demo->name = 'black'; $objDemo->sayHello(); $obj1Demo->sayHello(); ?>
可以将name属性的值设置为任意所需的数据-包括对象、整数数组、文件句柄或任何其他没有意义的值。但是,并不能再设置name属性时执行任何形式的数据验证或更新任何其他的值。
为了解决这个问题,必须以get[property]和set[property name]的函数形式来实现属性。这些函数称为存取器方法
<?php class Demo{ private $_name; public function sayHello(){ print "Hello" . $this->getName() . "!"; } public function getName(){ return $this->_name; } public function setName($name){ if(!is_string($name) || strlen($name)==0){ throw new Exception("Invalid name value!"); } $this->_name=$name; } } ?>
<?php require_once('class.demo.php'); $objDemo=new Demo(); $objDemo->setName('white'); $objDemo->sayHello(); $objDemo->setName(37); ?>
name属性的成员访问级别由Public变成private,并且怎家了一个下划线作为前缀。下划线是建议的命名约定,表明私有的成员变量和函数;
私有的内部成员变量不能从类的外部访问。由于不能直接访问这些变量,因此必须要getName()和setName()存取器方法获得这些信息,从而确保类可以在允许设置值之前检查该值。。。
成员变量或方法可以有3个不同级别的可见性:公有的、私有的和受保护的。
公有成员可以任意的代码访问。
私有成员只有类自身可以访问。这些成员通常用于类的内部处理买并且可能诸如注入某个数据库连接句柄活配置信息之类的内容。
受保护的成员可以由类自身以及从该类继承的类使用
对于许多将要创建的类,需要在初次实例化该类的对象时执行一些特殊的设置。例如,可能需要从数据库中获取某些信息,或者是初始化某些属性值。通过创建一个称为构造函数的特殊方法可以执行实例化对象所需要的任何活动,改方法在PHP中是通过名为_construct()的函数来实现的。在实例化对象时,PHP将自动调用这个特殊的函数
<?php class Demo{ private $_name; public function _construct($name){ $this->name = $name; } function sayHello(){ print "Hello $this->name!"; } } ?>
<?php require_once('class.demo.php'); $objDemo=new Demo(); $objDemo->_construct('white'); $objDemo->sayHello(); ?>