面向对象之类和对象

面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)技术为编程人员敞开了一扇大门,使其编程的代码更简洁、更易于维护,并且具有更强的可重用性

一、类和对象

1、数据存储需要

  • 什么是标量 什么是复合类型
  • 如何存储一个叫jack、18岁、会降龙十八掌的人

2、区别

配置电脑 配置清单【类】&电脑主机【对象】

二、编写第一个类

  1. 类通过关键字 class 开头定义
  2. 类名:字母下划线开头,后跟字母、数字、下划线,有意义,尽量使用英语单词,遵从大驼峰原则。(注意类名不区分大小写,但是对象名区分)
  3. 花括号 (推荐阅读PSR-2规范)
  4. 类的属性(在类中定义的变量)
  5. 类的方法(方法名和函数名一样,也不区分大小写)
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伪变量把类指向一个对象实例,我们就把它理解为当前实例;