php oop概念,PHP学习系列之OOP概念

本文介绍了面向对象编程(OOP)的基本概念,包括类的声明、实例化、字段与属性的设置和获取、常量与方法的定义及作用域,以及构造函数和析构函数的使用。此外还探讨了静态类成员、instanceof关键字的应用,并提供了PHP5中自动加载对象的方法。

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

* }

*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值