PHP 面向对象编程入门 - 类与对象

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();

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值