PHP类和对象

一、类和对象的关系

1、类的概念

1)类就是分类、类别、模板、概念等,类是无形的、看不见、摸不着,不实际存在的。
2)类是具有相同属性和行为的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,其内部包括属性和行为两个主要部分。例如:所有在学校学习的人,具有相同的属性:学号、姓名、性别等;具有相同的行为:学习。所以,这些人构成一个类,即学生类。

2、对象的概念

1)客观世界中任何一个事物都可以看成一个对象,对象看得见、摸得着,实际存在的。
2)对象是构成系统的基本单位。任何一个对象都应具有这两个要素:属性(Attribute)和行为(Behavior)。例如:学生“张三”是一个对象,他有属性:学号、姓名、性别等;行为有:学习、吃饭等。
3)对象来自于某个类,对象不能单独存在。一个类可以产生千千万万个对象。
4)对象和类的关系是,对象是类的实例,类是对象的模板。
5)类是抽象的,几乎不占用内存,而对象是具体的,占用存储空间。

二、类的定义

1、类的定义语法格式
//定义一个学生类
class Student
{
    //声明成员属性:就是普通变量定义
    //成员属性可以赋默认值,也可以不赋值
    //成员属性必须加权限访问修饰符
    //权限修饰符:public(公共)、protected(受保护)、private(本类)
    public $name="张三";
    public $age=18;

    //声明成员方法:就是普通函数定义
    //成员方法可以带权限修饰符,也可省略,省略后为public
    //类中的普通代码只能存在于方法中
    function info()
    {   
        echo "信息……";
    }
}
2、成员属性介绍

1)类的成员属性,就是指某个类具有的公共的特征、特性;
2)类中定义的变量,就是类的成员属性;
3)类的成员属性和普通变量的区别:类的成员属性必须要带权限修饰符,而普通变量不需要。

3、成员方法介绍

1)类的方法,就是某个类的公共的的行为或动作;
2)类的成员方法,与普通函数一样,都有返回值和参数;
3)成员方法与普通函数区别:成员方法只能存在于类中,成员方法定义前可以添加访问权限修饰符;
4)提示:成员方法可以省略权限修饰符,默认访问权限是public。

4、权限修饰符

1)public(公共权限):在任何地方都可以访问,主要包括:类外、本类中、子类中都可以访问。
2)private(私有权限):只能在本类中被访问,在类外和子类中都无权访问。
3)protected(受保护的权限):只能在本类中和子类中被访问,在类外不能被访问。

三、创建类的实例对象

1、实例化对象的含义

1)定义类是为了生产对象,如果不生产对象,类就没有意义。
2)一个类可以产生千千万万个对象,对象帮我们干活。
3)对象实例化:从一个类上来生产对象过程,就是类的实例化。

2、语法格式

1)使用new关键字来创建对象。
2)JS创建对象的方法:var today = new Date()

3)PHP创建对象的方法:$obj = new Student()
图片.png
图片.png

四、对象属性操作

//创建一个学生类
class Student
{   
    //声明成员(对象)属性
    public $name="张三";
    public $age=18;
}
//类的实例化
$obj=new Student();
//增加一个对象属性(给不存在的属性赋值)
$obj->edu="大专";
print_r($obj);

//删除一个对象属性
unset($obj->age);
print_r($obj);

//修改一个对象属性
$obj->name="李四";
print_r($obj);

//显示一个对象属性
echo $obj->name;
结果如下:
图片.png
图片.png

五、对象方法操作

图片.png
图片.png

六、伪变量$this的使用

伪变量$this的含义:

1)在JS中,使用this关键字来代替当前对象,例如:this.src = './a.jpg'
2)在PHP中,使用公式输入有误this->name = '张三'

3)$this代表当前对象,是到当前对象的一个引用;

4)$this更像是一个对象指针,指向当前对象;

5)$this只能用在对象方法定义中,去调用对象的成员属性或成员方法。

6)只有创建对象后,$this变量才存在。类不会自动运行。
示例:

//创建一个学生类
class Student
{   
    //声明成员(对象)属性
    private $name="张三";
    private $age=18;

    //返回一个水平线
    private function showLine()
    {
        return "<hr>";
    }

    //公共的成员方法
    public function showInfo()
    {
        $str="<h2>{$this->name}的基本信息如下:</h2>";
        $str.=$this->showLine();
        $str.="{$this->name}的年龄是{$this->age}岁";
        echo $str;
    }
}   
//类的实例化
$obj=new Student();
//调用类的成员方法
$obj->showInfo();
结果如下:
图片.png
图片.png

七、类常量的定义

1、类常量介绍

1)可以把在类中始终保持不变的值定义为常量,例如:圆周率、班级名称等。
2)常量的值必须是一个定值,不能修改,也不能删除;
3)类常量就是类的常量,是与类相关的,与对象无关。
4)类常量在内存中只有一份,不管创建多少个对象。
5)类常量可以极大节省服务器内存,可以被所有对象去共享。

2、类常量定义和调用格式

1)类常量没有权限,只有属性和方法才会有权限。
2)使用const来定义类的常量(局部常量),只能在局部作用域下使用;define()定义常量是全局常量,在任何地方都可以使用。
示例:

//创建一个数据库类
class Db
{
    //定义类常量
    const DB_HOST = "localhost";
    const DB_USER = "root";
    const DB_PASS = "123";

    public function showInfo()
    {   
        //访问类常量语法:ClassName::常量名
        //双引号内只能解析变量,不能解析常量
        $str = "主机名:".Db::DB_HOST;
        $str .= "<br>用户:".Db::DB_USER;
        $str .= "<br>密码:".Db::DB_PASS;
        echo $str;
    } 
}
//在类外直接访问类常量
$str = "主机名:".Db::DB_HOST;
$str .= "<br>用户:".Db::DB_USER;
$str .= "<br>密码:".Db::DB_PASS;
echo $str;
echo "<br>";
//创建类对象
$db = new Db();
$db->showInfo();
结果如下:
图片.png
图片.png

八、静态属性和静态方法

1)static关键字修饰的属性,就是静态属性;
2)static关键字修饰的方法,就是静态方法;
3)静态属性:就是类的属性,与类相关,与对象无关;
4)静态方法:就是类的方法,与类相关,与对象无关;
5)类的东西(类常量、静态属性、静态方法),通过"类名::"来调用;
6)静态属性,在内存中只有一份,被所有对象去共享,例如:人数
7)静态属性或静态方法的好处:就是为了节省内存。例如:创建了100个对象,而静态属性只有一份。
8)静态属性和类常量的区别:类常量在一次HTTP请求过程值永远不变;但是静态属性可以改变。
9)静态属性和静态方法,都可以加权限控制符,而类常量没有权限。
示例:

//创建一个学生类
class Student
{
    //私有的静态属性:就是类的属性
    //调用语法:ClassName::静态属性
    private static $name = "张三";
    private static $age = 18;

    //返回一个水平线
    private static function showLine()
    {
        return "<hr>";
    }

    //公共的静态方法
    public static function showInfo()
    {
        $str = "学生基本信息如下:<br>";
        $str .= Student::showLine();
        $str .= Student::$name."的年龄是".Student::$age."岁";
        echo $str;
    }
}
//直接调用类的静态方法
Student::showInfo();

结果如下:


图片.png
图片.png

九、self关键字使用

1)$this是指向当前对象的指针,而self是指向当前类的指针;

2)$this关键字用来调用对象的属性和方法;

3)self用来调用类常量、静态属性、静态方法;

4)$this关键字只能在成员方法中使用;

5)self关键字可以在成员方法和静态方法中使用;

示例:
图片.png
图片.png

猜你喜欢

转载自blog.csdn.net/csdn_heshangzhou/article/details/80936160
今日推荐