在学习类与对象之前,我们需要先了解一下面向对象的概念:《五分钟理解什么是面向对象》。
我们之前所有接触的都是面向过程的编程方式(函数式编程),而当我们学了类与对象之后就可以实现面向对象编程了。
什么是对象?
一切皆对象(不管你之前有没有听过这句话,但相信以后这绝对不会是你唯一听到的一次)。
我们研究的任何具体的事物或抽象的规则或计划都可以称之为对象(就像我们之前所了解的怎么把大象装进冰箱)。
对象由属性和方法组成,大象就是属性,把大象装进冰箱的动作我们称之为方法。我们暂可以理解为变量就是属性,函数就是方法。
什么是类?
类是一个抽象的概念。
类是抽象的,对象是具体的,比如:你娶了个老婆叫lizzy,老婆是类,lizzy是对象。因为老婆是一类人,而lizzy是具体的某一个。
(对于没有接触过的童鞋可能暂还是无法理解,那就先暂跳过,等完全了解下面的内容后自然就明白了)。
本期要点:
基础语法
定义类
根据类得到一个对象
定义类属性
定义类方法
操作对象
调用对象属性
调用对象方法
伪变量($this)
基础语法
①定义类
每个类的定义都以关键字 class 开头,后面跟着类名,后面跟着一对花括号(里面包含有类的属性与方法的定义)。
<?php
class name{}
?>
②根据类得到一个对象:
<?php
class name{}
$name = new name();
var_dump( $name );
?>
用关键词 new 把类实例化(根据 name 类实例化对象,把结果赋给变量 $name )。
类的实例化就是对象。
我们可以看到浏览器输出的是 object ,也就是变量 $name 的值是一个对象。
③定义类属性:
<?php
class name{
public $s1 = 0;
public $s2 = 1;
}
$name = new name();
?>
上面我们简单提过:变量就是属性,函数就是方法。
④定义类方法:
<?php
class name{
public $s1 = 0;
public $s2 = 1;
public function s1(){
echo 's1';
}
public function s2(){
echo 's2';
}
}
$name = new name();
?>
其中 public 表示可见性,后期会讲(官方手册:PHP手册-语言参考-类与对象-访问控制)。
其中类方法的 public 可以省略,但类属性里的一定不要省略。
操作对象
⑤调用对象属性:
<?php
class name{
public $s1 = 0;
public $s2 = 1;
public function s1(){
echo 's1';
}
public function s2(){
echo 's2';
}
}
$name = new name();
echo $name -> s1;
?>
-> 是指向运算符。
注意 s1 前面不能再加 $ 符了。
⑥调用对象方法:
<?php
class name{
public $s1 = 0;
public $s2 = 1;
public function s1(){
echo 's1';
}
public function s2(){
echo 's2';
}
}
$name = new name();
echo $name -> s1;
echo $name -> s1();
?>
在这里我们可以联想一下变量的定义与调用及函数的定义与调用:
这样我们就会比较容易理解类与对象的定义与调用了〜
伪变量( $this )
之前我们所讲的是通过对象(类的外部)去调用对象的属性和方法。
那么,如果我们要在类的内部调用属性和方法应该怎么办?
<?php
class name{
public $s1 = 0;
public $s2 = 1;
public function s1(){
$s1 = new name(); //在类里面实例化自己
$s1->s2(); //假设,我们需要调用s2的方法
}
public function s2(){
echo 's2';
}
}
$name = new name();
$name -> s1(); //执行调用$name的s1
?>
我们可以看到浏览器输出的结果是没有问题的:
我们调用的是s1的方法
s1里面实例化了一个name($s1)的对象,然后调用了一个s2的方法
最终echo's2'
其实我们可以更简单一点:
我们想要调用一个类属性或者类方法首先必须得到它的对象。
但是,如果是在类的内部我们还有另外一种方法可以简化,不需要去实例化,直接去使用 $this
<?php
class name{
public $s1 = 0;
public $s2 = 1;
public function s1(){
$this->s2(); //直接使用$this
}
public function s2(){
echo 's2';
}
}
$name = new name();
$name -> s1(); //执行调用$name的s1
?>
你可以发现最终浏览器输出的结果是一样的。
需要注意的是它一定要写在类的方法里面(不能写在属性里)。
在方法外面只能定义类属性和类常量(类常量还没讲)。
更多分享
0 基础教程丨PHP 网站开发
效率工具
小众电影
0 基础教程丨小程序开发
联系客服