PHP学习系列之OOP概念

来源:互联网 发布:淘宝卖家插件 编辑:程序博客网 时间:2024/05/22 11:30
/*================一、OOP的基本概念======================================*//* * 1、类的声明 */class ClassName{//字段声明//方法声明}/* * 1)创建一个员工类 */class Employee{private $age;private $sex;protected $wage;protected function checkAge(){if($this->age<30){echo "你的年龄小于30";}}protected function checkMoney(){if(5000<$this->wage<10000){echo "您的工资处于中等水平";}}}/* * 2)类的实例化(对象/实例) * 实例化后的对象具有类的所有性质和行为即属性和方法。 */$employee = new Employee();/* * 2.字段 * 1)字段的声明及作用域 */class Emple{private $age;private $sex;/* * 字段的声明命名规则同变量命名规则相似,PHP中字段支持5中作用域private、protected、public、 * final、static,OOP语言中并不鼓励使用public 声明字段。 * a)private:只能在定义字段的类中访问;私有字段只能通过公共接口来访问,也就是封装的思想,从而包含私有变量的值。 * b)protected:在继承的子类中可以访问和操作保护字段 * c)public:可直接访问字段 * d)final:标记为final的属性或方法可以访问被子类所覆盖 * e)static: */}/* * 3.属性 * 1)设置属性: * __set(propName,propValue):成功执行返回true,否则false * a)负责隐藏字段的赋值实现,并在为类字段赋值之前验证类字段数据; * b)用来扩展类,使之增加新的属性; * 2)获取属性: * __get(propName);成功执行返回true,否则false * * 3)自定义获取属性和设置属性方法: * 可以为每个私有属性创建两个方法set()和get()方法,类似java和c++中的私有属性的封装。 *//* * 4.常量 * 即表示不会改变的值,对于从改类实例化的任何对象来说,常量值在这些对象的生命周期中都保持不变。 * 1)常量定义:const PI='jjzuo';一般变量名字母全大写 * 2)常量访问: *  class Company{ *const PI="3.14"; *} *echo Company::PI; *$company=new Company(); *echo $company::PI; *//* * 5.方法 * 方法即类的行为 * 1)方法的声明 * scope function fnName(){} * 2)方法的调用 * 即实例化的对象调用方法$employee->fnName(); * 3)方法的作用域 * 有6中作用域:private、protected、public、abstract、final、static,现在主要说说abstract作用域 * a)private:只能类内部使用,不能通过实例化对象调用或者子类调用 * b)protected:只能在该类即子类中调用 * c)public:公共方法 * d)abstract:抽象方法只在父类中声明,但是在子类中实现该方法(行为),只有声明为abstract类即抽象类中才能声明抽象方法 * 同时一个接口中的方法都是抽象方法。 * abstract class Home{ * abstract function hire(){}; * abstract funciton getPerson(){}; * ... * } * e)final:final方法可以防止被子类所覆盖; * f)static: * 4)类型提示 * PHP5的新特性,可以确保传递给方法的对象确实是所期望的的实例; * 类型提示之适用于对象,而不适用于整数、字符串等类型提示; * *//*================二、构造函数和析构函数======================================*//* * 1.构造函数 * 如果希望在实例化对象的时候对某些字段初始化或者执行某些函数,可以使用构造函数; * 构造函数定义为对象实例化时自动执行的一段代码; * 1)OOP构造函数的优点: * a)可以接受参数,能够在创建对象时赋给特定的对象字段; * b)构造函数可以调用类方法或者其他函数; * c)类的构造函数可以调用其他构造函数,包括调用父类的构造函数; * 2)构造函数的声明: * function __construct([可选参数]){ * * } * 如果确保某些方法只能通过构造函数来调用,可以将方法声明为private,从而使对象和子类无法调用此方法。 * * 3)构造函数的调用 * a)调用父类的构造函数:PHP和java不同,它不会自动调用父类的构造函数,必须用parent关键字显示的调用 *   class Emplyee{ *   function __construct(){ * *   } *   } *   class Manager extends Employee{ *   function __construct(){ *   parent::__construct(); *   ... *   } *   } * b)调用与实例化对象无关类的构造函数: *   class Staff{ *   function __construct(){ * *   } *   } *   class Manager{ *   function __construct(){ *   Staff::__construct();//调用Staff类的构造函数 *   ... *   } *   } * 2.析构函数 * 当在对象撤销时需要撤销内存中的数据时,可以定制一个析构函数 * 析构函数的声明: *   function __destruct([可选参数]){ * *   } * *//*===============三、静态类成员======================================*//* * 当有必要创建共所有实例化对象共享的字段和方法是,这写字段和方法与所有的类实例有关, * 但不能由任何特定对象调用。 * a)声明方式: * 字段:private static $name; * 方法: static function fnName(){}; * b)调用方式: * 字段: self::name * 方法:ClassName::fnName(); *//*================四、instanceof关键字======================================*//* * 此关键字是PHP5.0的一个新成员,使用此关键字可以判断一个对象是类的实例、类的子类、还是实现了某个 * 特定接口,并进行某些特定操作。 * $manager=new Manager(); * if($manager instanceof Manager){ * echo 'yes'; * } * PS:a)类名Manager没有任何定界符;b)可以使用case语句对不同的类进行实例化判断。 *//*================五、辅助函数===========================================*//* * 1.确定类是否存在 * class_exists(string ClassName); * 2.确定上下文 * get_class(Object object);返回对象所属的类名,无则返回false * 3.了解类方式 * get_class_methods(mixed ClassName);返回类中定义所有方法名称数组 * 4.了解类字段 * get_class_vars(string ClassName);返回字段名和值组成的关联数组 * 5.了解声明类 * get_declared_classes();返回当前执行 脚本中所有类名称组成的数组 * 6.了解对象字段 * get_object_vars(Object object);返回对象定义字段和对于值组成的关联数组 * 7.确定对象的父类 * get_parent_class(mixed object);返回object所属类的父类名 * 8.确定接口是否存在 * interface_exists(string InterfaceName);存在返回true,否则false * 9.确定对象类型 * is_a(Object object,string ClassName); * 10.确定对象子类类型 * is_subclass_of(Object object,string ClassName); * 11.确定方法是否存在 * method_exists(Object object,string methodName); * *//*================六、自动加载对象===========================================*//* * PHP5.0中开始引入自动加载对象的概念 * 通过定义__autoload * function __autoload($class[类名]){ * require_once("文件夹名称/$class.class.php"); * } */