面向对象,对象概念是面向对象技术的核心。在显示世界里我们所面对的事情都是对象,如计算机、电视机、自行车等。在面向对象的程序设计中,对象是一个由信息及对信息进行处理的描述所组成的整体,是对现实世界的抽象。
对象的主要三个特性
对象的行为:可以对 对象施加那些操作,开灯,关灯就是行为。
对象的形态:当施加那些方法是对象如何响应,颜色,尺寸,外型。
对象的表示:对象的表示就相当于身份证,具体区分在相同的行为与状态下有什么不同。
面向对象模型
面向对象的概念:
oop(面向对象的编程)它能是其代码更加简洁易于维护并且具有更强的可重性
什么是类:
类是具有相同属性和服务的一组对象的集合比如说人,书,轮船,车都属于类,他为属于该类的对象做了一个统
一的抽象描述,在编程的语言中类是一个单独的程序,它应该有一个类名包括属性的说明和服务两个部分。
什么是对象:
对象是系统中描述客观事件的一个实体,他是构成系统的一个基本单位。*数据与代码都被捆绑在一个实体当中*
,一个对象由一组属性和对这组属性进行操作的一组行为组成。 从抽象的角度来说,对象是问题域或实现域中某些
事物的一个抽象。他反映该事物在系统中保存的信息和发挥的
作用:它是一组属性和有权对这些属性进行操作的一个封装体。客观世界是由对象和对象之间的联系组成的。
类和对象的关系:
类与对象的关系就如模具和铸件的关系,类的实力化的结果就是对象,而对对象的抽象就是类,类描述了一组有
相同特性(属性)和相同行为的对象。
类与属性和方法
PHP中定义类语法格式:
class classname [可选属性]{
public $property [=value];… //用public声明一个公共标识 然后给予一个变量 变量也可以赋值
function functionname ( args ){ //类的方法里的成员函数
代码} …
//类的方法(成员函数)
}
生成对象(类的实例化): $对象名=new classname( );
使用对象的属性
在一个类中,可以访问一个特殊指针$this当在该类中通过一个操作设置或访问该变量时,使用$this->name来引
用.
对象的生成 :
定义好类后用一个new来声明,由于对象资料的封装特性,对象是无法由主程序区块直接访问的须通过对象来调
用类中所定义的属性和行为函数,间接地达成存取控制类中资料的目的。
对象和类的关系:
对象是实际存在的,占有动态资源。
类是对象的蓝图,可能占有静态资源。
对象属性占有动态资源类(静态)属性实际上是有类名字空间上的"全局变量"
性能考虑:
每个对象要单独占用数据空间
增加的调用层次可能消耗执行时间
方法的参数形式和传递方式
方法的参数可以是基本数据类型、数组和类对象。
基本数据类型:值参传递
数组:值参传递
类对象:引用传递
构造函数 :构造函数是在类中起到初始化的作用,构造函数的生成方法与其他函数一样只是其名称必须是
__construct().
语法格式:
function __construct(参数){
..................
}
析构函数
当对象脱离其作用域时(例如对象所在的函数已调用完毕),系统自动执行析构函数。应在退出前在析构函数中
用释放内存。 析构函数__destruct 析构函数没有任何参数
范例:
class person
{
function _ _destruct( )
{
echo "bye bye !";
}
}
$a=new person();
访问类型
public 公共的(公共修饰符) 类内部与类外部都可以访问的
private 私有的(私有修饰符) 只能在类内部访问
protected 受保护的(保护成员修饰符) 子类可以访问 类外部不可以访问
oop的三个重要特性
封装,继承,多态
封装性:封装性就是把对象的属性和行为结合成一个独立的单位。封装一个类需要两步 第一步是私有化一个类
第二步是用set和get 做出读取赋值的操作他的好处是:隐藏类的实现细节,可以方便加入逻辑控制性,限制对属性的
不合理操作,便于修改增强代码的可维护性。
继承性:B类的对象拥有A类的全部属性与行为,称作B对A类的继承。 假如一个类从多个类中继承了属性与服务
,这称为多继承,通常我们成为继承类为子类被继承类为父类,在PHP中只有单继承,但一个父类可以被多个类继承
,但是一个子类只能有一个父类,但是允许关联继承,通过继承可以减化类的定义。extende声明继承关系,语法格
式:class B extends A 此范例指明 B继承了A,类的外部访问对子类是有效的,子类与父类的属性与方法,子类继承
父类的所有内容,但父类中的private部分不能直接访问子类中新增加的属性和方法是对父类的扩展子类中定义的与父
类同名的属性是对父类属性的覆盖,同名的方法也是对父类方法的覆盖
多态性:多态性是指在父类中定义的属性或行为被子类继承之后,可以具有不同的数据类型或表现出不同的行为
。这使得同一个属性或行为在父类及其各个子类中具有不同的语义。 就是说同一种方法在子类与父类中执行的结果
不同。
静态属性和方法
static关键字来声明静态方法
static静态变量 在类的内部生成一个静态变量 就是能够被所有类的实力化共想 也就是说静态成员则放到了"初始化静
态段",在类第一次被加载的时候放入的,可以让堆内存里面的每个对象所共享
使用方法:self::$静态属性、self::静态方法
static function p(){
echo self::$country;
echo self::PI;//访问常量
//echo $this->name;在静态方法中只能操作静态属性
//self::p();
}
外部调用:类::$静态属性、类::静态方法
const关键字:用来生成常量 常量是唯一的不能改变的 惯例常量为大写
const CONSTANT = 'constant value'; 生成一个常量
echo self::CONSTANT;//类内部访问
echo ClassName::CONSTANT;//类外部访问
重写的方法
在子类中,使用parent访问父类中的被覆盖的属性和方法
parent::__construce();
parent::$name;
parent::fun();
覆盖父类原有属性
clone克窿对象 语法格式
$c=clone $p;
$c克窿的对象$p 输出echo $c->name;
抽象方法和抽象类
抽象方法是作为子类摸版使用的。
abstract class Person{
public $name;
abstract function getInfo();
}
抽象类不能被实力话,一个抽象类中,必须有一个抽象方法。但是抽象类中可以定义动态函数。接口 当一个类继
承了一个接口之后,它要覆盖接口的所有方法,接口只能声明常量,接口的方法必须定义为共有否则无法继承,接口
可以与多个接口间继承
语法:
interface PCI{
const TYPE="PCI";
//public $name; error
function start();
function stop();
}
接口中的方法可以声明为static
interface A{ function a();}
interface B{ function b();}
interface C extends A{ function c();}
class D implements B,C{
function a(){}
function b(){}
function c(){}
}
类
类的声明:
<?php
权限修饰符 class 类名{ //权限修士符号:public,protected,private 或者省略3者.
//类体; //class 是建类关键字
} //类名必须跟在class 后面,且跟上{}.{}之间放类的成员.
?>
//ps:在class关键字前可以加权限修饰符外,还可以加static,abstract等关键字.一个类,即一对大括号
之间的全部内容都要在一段代码段中,不允许将类中的内容分割成对块.
<?php
class ConnDB{
//....
?>
<?
//...
};
?>
成员属性:
在类中直接声明的变量称为成员属性/变量.其类型可以为php中的标量类型和复合类型,使用资源类型和空类型
是无效的. 此外,成员属性的声明时,必须要有关键字来修饰:有特定意义的关键字:public,protected,private ;不需要特
定意义:var.声明成员属性时,没有必要赋初始值.
成员常量:
以const常量修饰,例如:const PI = 3.1415926;
常量的输出不需要实例化,直接由类名+常量名调用即可,格式为: 类名::常量名(特殊的访问方法:--------"$this"
和 "::" )
1) $"this" 存在于每个成员方法当中,它是一个特殊的对象以用方法.成员方法属于那个对象,$this应用就代表那个
对象,其作用就是专门完成对象内部成员之间的访问.
2) "::"成为作用域操作符,使用这个操作符可以在不创建对象的情况下调用类中的常量,变量和方法. 其语法格式
如下:
关键字::变量名/常量名/方法名
关键字:parent,可以调用父类成员中的成员变量,成员方法和常量;
self,可以调用当前类中的静态成员和常量;
类名,可以调用类中的常量,变量和方法;
成员方法:
在类中声明的函数成为成员方法,在一个类中可以声明多个函数,即对象可以拥有多个成员方法.成员方法的声明和
函数的声明相同,唯一特殊之处就是成员方法可以有关键字对它进行修饰,从而控制其访问权限.
类的实例化:
创建对象:
$变量名 = new 类名称([参数]); //类的实例化.
访问类成员:
$变量名 -> 成员属性 = 值;
构造方法和析构方法
构造方法是对象创建完成后第一个呗对象自动调用的方法.它存在每个类的声明当中,是一个特殊的成员方法,一
般用来完成一些初始化操作.如果类中没有构造方法,系统会默认自动生成一个没有参数的构造方法.
格式:
function _construct(形参列表){
//方法体
};
析构方法则如构造方法相反,它是在对象被销毁前最后一个调用的方法.它将完成一个特定的操作,如关闭文件和
释放内存.
格式:
function _destruct(){
//方法体
};
面向对象特点:封装性,抽象性,多态性.