1. 面向对象的概念 ;
- OOP(Object-Oriented Programming,面向对象编程),编程的代码简洁、更易于维护、具有更强的可重用性
- OOP 达到了软件工程的三个目标:重用性、灵活性、扩展性
- OOP 面向对象编程特点:封装、继承、多态
1.1 类与对象之间的关系,
-
类与对象的关系就像模件和铸具之间的关系。
-
类实例化结果就是对象,而对象的抽象就是类。
-
类是描述了具有一组相同特性和相同行为的对象。
-
在面向对象的编程语言中,类是一个独立的程序单位,具有相同的属性和服务的一组对象集合。它为属于该类的所有对象提供了统一的抽象描述,其内部包括成员属性和服务。
- 举个例子:提到笔记本电脑,会想到笔记本电脑的外观样式,长度宽度厚度、颜色、屏幕大小、键盘样式、功能(可以上网、编程、看电影、打游戏)等等。这些都是一个具体事物在你大脑里的反应。
- 那我们的类其实和它是相似的。类就是我们对具体的一个事物、具体的一个对象用程序代码来描述出来。这和我们在大脑中的抽象是一样的。所以说呢,我们是可以把现实的事物抽象成类的。
- 什么是对象呢。客观世界里,所有事物都是由对象和对象的联系组成的。对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。你的电脑、手机等都是一个对象。
- 可以简单的理解为,对象是你可以使用的。而类只是对这件物品进行的描述,是不可以使用的,是一个认知。
- 在程序里也是。如果是我们有类了,这个类并不是可以直接操作的。他需要我们实例化成对象,然后我们用对象去操作对象里的成员属性或成员方法。
1.2 面对对象程序设计,
-
认识面对对象
- 对象的概念是我们面向对象的核心。在现实世界里,我们面向的所有事物都是对象。
- 在面向对象的程序设计中,对象是由一个信息及对信息处理描述所组成的整体,是对现实世界中的抽象。
- 再举一个例子。一个刮胡刀,这个刮胡刀有几个刀片、有多少电量、是需要手动的还是需要电池的等等,这些都是对它的描述。然后它有一个功能就是刮胡子。在这里我们对刮胡刀外观、颜色的描述,就相当于类的成员属性,而可以刮胡子,那就是它的功能,那相当于类中的成员方法。
-
面向对象的三个主要特性
- 对象的行为。是可以对对象施加的哪些操作。比如说电视机的开和关,转换频道,这些都是它的行为
- 对象的状态。当施加那些方法的时候,对象是如何响应的。如电视机的外观,尺寸,颜色等
- 对象的标识。如何区分具有相同行为与状态的不同对象。比如说,有一个盖房子所使用的图纸。只要有资金就可以根据这张图纸盖很多房子。但是由于都是根据这一个图纸建造出来的,所以这些房子都具有相同的外观,也有相同的行为,比如说都可以住人、还有一些其它功能。那我们是如何区分这些房子?我们可以对这些房子进行编号,这样就可以做出区分。对象也是,对象是有标识的。通过一个类实例化出的对象是有不同的标识来标识不同的对象。
-
总结
- 类就像一个模具,而我们对象是通过模具产生的一个具体的事物。一个模具是可以产生很多的对象。
- 类就像一个工厂,而对象就是工厂产出来的具体产品,用户可以购买这些产品然后使用。
2. 如何抽象一个类;
- 类的声明
- 成员属性
- 成员方法
#### 类的声明
# 简单格式
# “[]” 表示可选
[修饰符] class 类名{ //使用class关键字加空格后加上类名
[成员属性] //也叫成员变量
[成员方法] //也叫成员函数
}
# 完整格式
# extend 继承,implement 实现(接口)
[修饰符] class 类名 [extends 父类] [implements 接口1[,接口2...]]{
[成员属性] //也叫成员变量
[成员方法] //也叫成员函数
}
#### 成员属性
格式:修饰符 $变量名[=默认值]; //如:public $name = "demo";
注意:成员属性不可以是带运算符的表达式、变量、方法或函数调用。
# 错误格式
public $var3 = 1+2;
public $var4 = self::myStaticMethod();
public $var5 = $myVar;
# 正确定义方式
public $var6 = 100; //普通数值(4个标量:整数、浮点数、布尔、字符串)
public $var6 = myConstant; //常量
public $var7 = self::classConstant; //静态属性
public $var8 = [true, false]; //数组
#### 成员方法
# 成员方法格式:
[修饰符] function 方法名(参数..){
[方法体]
[return 返回值]
}
# 举例
public function say(){ //人可以说话的方法
echo “人在说话”; //方法体
}
- 实例说明:person.class.php
<?php
// 类的声明: 关键字 class 类名{ }
class person{
// 成员属性 修饰符 $成员属性名 是可以给默认值
public $name;
public $age;
public $gender = '男';
// [修饰符] function 成员方法名(参数列表){ 方法体 }
public function say($n){
echo "{$n}正在说话";
}
public function run(){
echo "正在走路";
}
public function eat(){
return "正在吃饭";
}
}
3. 通过类实例化对象。
- 实例化对象
- 对象中成员的访问
- 特殊对象引用 $this
# 实例化对象
# 当定义好类后,我们使用 new 关键字来生成一个对象。
$对象名称 = new 类名称();
# 以后提到构造方法之后,才能传参数列表
$对象名称 = new 类名称([参数列表]);
# 对象中成员的访问
# 语法:
$引用名 = new 类名(构造参数);
$引用名 -> 成员属性 = 赋值; //对象属性赋值
echo $引用名 -> 成员属性; //输出对象的属性
$引用名 -> 成员方法(参数); //调用对象的方法
# 特殊对象引用 $this
# 之前说的是在类的外部调用成员属性和成员方法
# 但是在类的内部需要一个特殊的词($this),它代表本身的意思,在类的内部使用代表的是本对象。
# 类名实例化出来的对象的名字是不确定的。
# 如果直接写一个固定的对象名、在类的里面引用成员属性和成员方法的话,没有问题。
# 如果再实例化一个新的对象名,那么类就不能工作了。
# 所以用了一个统一的词 $this 来表示本对象。
# 就像日常生活中人们的名字叫“张三”,“李四”,但是有一个通用的词就是“我”。
# 不管叫什么名字,“我”这个词都是代表我自己本身。
- 实例说明:phone.class.php
<?php
class phone{
public $width;
public $height;
public $size;
public function call($name){
echo "正在给{$name}打电话";
}
public function message($name){
echo "正在给{$name}发短信";
}
public function play(){
echo "正在玩手机!";
}
public function info(){
$this -> play();
return "手机的宽度:{$this -> width},手机的高度:{$this->height}";
}
}
$phone = new phone();
$phone -> width = "5CM"; // 对象对成员属性的赋值
$phone -> height = "10CM";
//echo $phone -> width; // 用对象去取得成员属性所存的值
//$phone1 = new phone();
//$phone1 -> height = "10CM";
//$height = $phone1 -> height;
//echo $height;
//echo $phone1 -> height;
//$phone1 -> aaaa = "AAAA"; // 语法正确,但是不建议这么写
//var_dump($phone1);
$phone -> call("list");
echo "<br />";
$phone -> call("tom");
echo "<br />";
$phone -> play();
echo "<br />";
echo $phone ->info();