面向对象
Posted 莫欺_少年穷
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象相关的知识,希望对你有一定的参考价值。
1、概念:面向对象就是将要处理的问题抽象为对象,然后通过对象的属性和行为来解决对象的实际问题;
2、特点:
①封装性:将一个类的使用和实现分开,只保留有限的接口(方法)与外部联系。对于使用该类的开发人员只需关注怎么去使用该类,而不用关注其实现的细节。这样做可以让开发人员将精力集中起来专注别的事情,同时避免了程序之间相互依赖而带来的不便;
类的封装通过关键字public、private、protected、static、和final实现的;
public:公共成员关键字,可以再程序的任何地方被其他类和对象调用。子类可以继承和使用父类中所有的公共成员
private:私有成员关键字,只能在本类的内部被调用和修改。子类和类外部都不可访问
protected:保护成员关键字,可以在本类和子类中被调用,其他地方则不可以被调用
static:静态成员关键字,该关键字修饰的属性和方法不需要对象,使用 类名::$静态属性名/静态方法名(参数1,...) 就可以直接访问。
②继承性:子类自动继承父类中的属性和方法,并可以重写或添加新的属性和方法。继承简化了对象和类的创建,增加了代码的可重用性;
③多态性:同一个类的不同对象,使用同一个方法可以获得不同的结果。多态性增加了软件的灵活性和重用性。
3、对象是类进行实例化后的产物;
4、$this 操作符:表示对对象本身的引用
5、“::”操作符:可以在没有任何实例的情况下访问类中的成员
—— 语法格式: 关键字::变量名/常量名/方法名
— 关键字分类:①parent关键字:可以调用父类中的成员变量成员方法和常量;
②self关键字:可以调用当前类中的静态成员和常量;
③类名:可以调用本类中的变量、常量和方法
6、构造方法: _ _construct()
对象创建完成后第一个被对象自动调用的方法。
7、不能被实例化的特殊的类:抽象类
使用:只能作为其他类的父类使用。class 子类 extends 父类{ }
语法格式:
abstract class 抽象类名称{ //抽象类的成员变量列表 abstract function 成员方法1(参数); abstract function 成员方法1(参数); }
注意:抽象类至少要包含一个抽象方法;抽象类没有方法体,其功能只能在其子类中实现;
应用场景:抽象类和抽象方法主要应用于复杂的层次关系中,这种层次关系要求每一个子类都包含并重写某些特定的方法
8、不能被实例化的特殊的类:接口
使用:接口与抽象类相同,不能进行实例化的操作,需要通过子类来实现。但是接口可以直接使用接口名称在接口外获取常量成员的值。class 子类 implements 接口类1,接口类2{ }
语法格式:
interface 接口名称{ const 常量名; //接口中成员只能是常量 (public) function 方法名(); //成员方法必须是抽象方法 }
9、面向对象常用的魔术方法:_ _call()、_ _toString()、_ _autoload()
①_ _call(): 当程序试图调用不存在或不可见的成员方法时,php会先调用_ _call()方法来存储方法名和参数。
使用格式:
public function _ _call($method,$parameter){
echo ‘如果方法不存在,则执行该方法<br>‘;
echo ‘方法名为:‘.$method.‘<br>‘; //输出第一个参数,该类不存在的方法名
echo ‘参数有:‘;
var_dump($parameter); //输出第二个参数,不存在的方法中传入的参数
}
②_ _toString():当时用echo和print输出对象时,将对象转化为字符串。
使用格式:
class Person{ public function _ _toString(){ return "我是toString的方法体"; } } $per = new Person(); echo $per; //输出 “我是toString的方法体”
③_ _autoload():自动实例化需要使用的类。
以上是关于面向对象的主要内容,如果未能解决你的问题,请参考以下文章