PHP学习系列之OOP概念

/*================一、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");
 * }
 */


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值