概念:面向对象(英语:Object-oriented programming,缩写:OOP),是一种基于面向过程的开发思想。与面向过程强调分解事物步骤相似,面向对象更需要追求事务操作的’主题‘,也就是’对象‘
面向过程编程本质上的‘谁’都是‘我’,但实际业务是有不同的‘谁来完成’,面向对象就是要解决这个操作主题的问题,先写好函数功能,然后再放到某个主体中
面向对象编程时一种编程思想,不是具体技术,在面向对象思维中,任何动作的执行,任何动作的执行或者数据都属于对象(一切皆对象)
面向对象关键词说明
类:class,是定义面向对象主题的最外层结构,用来包裹主题的数据和功能(函数),类是一类具有共性事务的代表,代表的事务的共性
对象:object,某类事务的具体代表,也是实际数据和功能操作的具体单元,也称之为(instanse)
实例化:new,从一个抽象的概念得到一个符合抽象概念的具体实例的过程
类成员:member,指类class结构中创建的函数,也称之为成员方法或者成员函数
方法:method,本质是在class结构中创建的函数,也称之为成员方法或者成员函数
属性:property,本质是在类class结构中创建的变量,也称之为成员变量
常量类:constant,本质是在类class结构中创建的常量
面向对象简单实现
定义:利用面向对象提供的关键字和代码规范来进行编程,核心就是class和object
语法:
<?php
//定义一个类class关键字
class A{
}
?>
类calss是一种结构,没有语法错误的情况下,代码不会执行(与函数一样),也无法打印输出
明明规范和变量一样,通常类名首字母大写方便区分
类是无法访问的,需要得到具体的对象才能访问,可以通过(实例化)new来实现对象的创建:new类名[()],小括号加不加都可以
<?php
//定义类class关键字
class Nothing{
}
class MyClass{ //首字母大写,后用驼峰 法
}
//实例化对象
// var_dump(new Nothing).'<br>';
// var_dump(new MyClass());
//使用变量保存对象
$n = new Nothing;
$m = new MyClass;
var_dump($n,$m);
?>
类成员(属性)
类成员就是指直接定义在类结构{}内部的一级成员,即直接依赖{}的成员,在PHP中类成员有三种:成员变量(属性),成员方法(成员函数),类常量
成员变量:就是在类结构{}下直接定义的变量,但与定义普通变量的方法不同,需要在变量名前面使用一个关键字public,语法:public 变量名字 = 值,成员变量可以赋值也可能不赋值
成员变量的访问必须通过对象才能进行,也就是要new 一个对象,然后才能对属性进行增删改查
语法$对象名->属性名
<?php
//使用关键词class定义类
class Buyer{
//定义成员变量,保存数据
//需要用关键字public定义
public $name; //定义属性(成员变量不赋值)
public $money =10; //定义属性(成员变量赋值)
}
//对象保存到堆区
$b = new Buyer;
//访问属性
echo $b->name;
echo $b->money.'<br>';
//修改属性
$b->money = 1000;
//删除属性
unset($b->name);
//增加属性
$b->age = 20;
echo $b->age.'<br>';
echo $b->money;
?>
对象一旦产生,可以自主对属性进行操作;可以新增(无限属性)
成员函数(方法)
就是定义在{}结构下的函数,函数内部的内容与原来的函数结构一样,可以有分支,循环等
<?php
//定义类
use Buyer as GlobalBuyer;
class Buyer{
function display(){
echo __CLASS__; //魔术常量输出当前类名
}
}
$a = new Buyer;
$a->display();
?>
类常量
<?php
class A{
const PI =3.14; //const 常量名 = 值,不能用define
}
?>
属性必须写修饰限定符,方法可以省去不写,默认public
public共有类,即表示所修饰的内容(属性或方法)可以在当前类内部访问,也可以在类的外部访问
protected:受保护,即表示修饰的内容只能在类内部访问
private:私有属性,不能在当前类的外部访问,只能在自己的类内部访问
类内部对象
类成员(对象)的属性和方法的访问必须通过对象才能访问,类外部通过实例化new对象从而实现对象的访问,但类内部不能访问类外部的对象,此时类的内部就内置了一个对象$this代表访问对象$this是内置对象,谁调用属性,$this就指向谁
<?php
//定义类
class Saler{
//定义属性
public $count = 100;
protected $discount = 0.8;
private $money = 100;
//定义方法
public function getaAll(){
// 内部访问
// global $s; //把全局的变量引入局部
// echo $s->count,$s->discount,$s->money;
//使用内置对象$this
echo $this->count,$this->discount,$this->money;
}
}
$s = new Saler;
$s->getaAll() //调用方法
?>
$this,class,new之间的关系原理
class是定义类,属于非执行代码段,会被加载到代码段
new是实例化对象,先判定类在内存中是否存在,不存在报错,不能实例化内存中不存在的类
$this是系统在方法中内置对象的通用名字