面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)技术为编程人员敞开了一扇大门,使其编程的代码更简洁、更易于维护,并且具有更强的可重用性
一、类和对象
1、数据存储需要
- 什么是标量 什么是复合类型
- 如何存储一个叫jack、18岁、会降龙十八掌的人
2、区别
配置电脑 配置清单【类】&电脑主机【对象】
二、编写第一个类
- 类通过关键字
class
开头定义 - 类名:字母下划线开头,后跟字母、数字、下划线,有意义,尽量使用英语单词,遵从大驼峰原则。(注意类名不区分大小写,但是对象名区分)
- 花括号 (推荐阅读PSR-2规范)
- 类的属性(在类中定义的变量)
- 类的方法(方法名和函数名一样,也不区分大小写)
class Student
{
public $name;
public $sex;
public function readBook(){
echo $this->name.':抬头望明月,低头思故乡';
}
}
三、处个对象
通俗的说:类是用于生成对象的代码模板。使用关键字new
来实例化一个对象,你可以把这个行为理解成用模具生成一个产品;
类名后的小括号,可加可不加。建议加上
## 实例化一个对象
$std = new Student();
## 设置对象属性
$std->name = '李白';
## 调用对象方法
$std->readBook();
不同实例
require('Article.php'); //注意使用require
$panshi_article1 = new Article();
$panshi_article2 = new Article();
var_dump($panshi_article1);
echo '<br/>';
var_dump($panshi_article2);
打印后的结果:
object(Article)#1 (0) { }
object(Article)#2 (0) { }
$panshi_article1
和$panshi_article1
是统一类型的不同实例;PHP脚本中创建的每个对象也有唯一的内部标示符(#
后面的数字)
四、类中的属性
类内部获取一些属性和方法时,用
$this
; 注意操作属性时,属性前不加$
符号,即$this->attribute
类中的属性也就做成员变量,用来存放对象之间互不相同的数据,例如下面我定义Jack的属性name、attribute;
class Jack
{
public $name = '雨石';
public $attribute = '有才华';
}
类的成员属性和我们定义变量很相似;不过必须在声明和赋值前加关键字(Public、Protected、Private),这些关键字决定了属性的作用域;我们可以通过->
字符连接对象变量和属性名来访问属性变量;
$rencai = new Jack();
echo $rencai->name;
// 打印结果:雨石
1、类的成员属性和普通变量的区别
/**
* 类的成员属性和普通变量的区别:如果属性在声明的时候被赋予初始值,那么这个初始值 必须是常数,不能是表达式。
* @author jack
*/
class BoyClass
{
public $name = 'jack';
public $age = 18;
public $like = ['book','run','eat'];
}
//vs
class Test
{
public $num = 2;
public $timer = get_date();
public $square = $num * $num;
}
2、动态的设置类的成员属性
$rencai = new Jack();
$rencai->name = '老聂';
// 打印结果:雨石
动态设置属性的方法在面向对象编程中不是一个好习惯; 因为我们在创建类的时候就已经定义了它的数据类型;我们希望我们创建的这个类是有特定的属性和一些函数集合组成。 那么之后我们都默认认为这个属性是可用的,但是如果你动态改变了该属性值,就没办法保证前面或后面的程序能不能正常运行了
五、成员方法
成员可以让对象用来存储数据,成员方法可以让对象执行任务
类方法就是在类中声明的特殊函数。和函数不同的是,他们也要加关键字(Public、Protected、Private)来觉定其作用域,如果在声明是省略了,那类方法默认是public
class Jack
{
public $name = '雨石';
public $attribute = '有才华';
public function read(){
echo $this->name.'在静悄悄的夜里敲代码';
}
}
$rencai = new Jack();
$rencai->name = '老聂';
$rencai->read();
// 输出:老聂在在静悄悄的夜里敲代码
注意:我们使用了$this
伪变量把类指向一个对象实例,我们就把它理解为当前实例;