zoukankan      html  css  js  c++  java
  • 类的定义、构造函数、析构函数

    类的定义:

      类的说明:

      (1)   class 是一个关键字,表示这是一个类,不能修改

      (2)   public $name , 是一个成员属性, 当我们类定义的{} 中定义的变量,就是一个成员属性

      (3)   public 是访问修饰符, 他是用于控制成员属性(变量)的访问范围的, 除了public还有两个,protected 和 private 

      (4)   $cat1 = new Cat , 这个叫实例化一个对象, $cat1 就是一个对象, new 是一个关键字,表示新创建一个对象

      (5)   $cat1->name = '小白'; 表示给成员属性赋值,-> 符号叫做对象运算符

      (6)   当我们需要看一个对象的情况时,我们可以通过 var_dump 来输出该对象

      对象的创建: $对象名 = new 类名() 或者是 $对象名 = new 类名

      对象属性的访问方式:$对象名 ->属性名    ->成为对象运算符

      对象的传递方式有两种:

      (1)非引用传递:$a = $b  理解:$a和$b合租,当b搬出去了并不会改变a的居住地址

      (2)引用传递: $a = &$b 理解: $a和$b是两夫妻,当有一方要换居住地另一方则一起更换

      类的基本语法: 

    //定义类
    //类名的命名规范是大驼峰 CatName
    class Cat{
        //定义属性
        //可以给对象属性初始值,如果没有给初始值则默认为null
        public $name = '加菲猫';
        public $age;
        public $color;
        public $food;
        public function act(){
                echo "抓老鼠";
            }
    }
    //通过类来创建对应的对象实例
    $cat1 = new Cat;
    //给对象赋值
    $cat1 -> name = '波斯猫';
    $cat1 -> age = 3;
    $cat1 -> color = '白色';
    $cat1 -> food = ['老鼠','鱼','猫粮'];
    //打印对象
    var_dump($cat1);
    //调用对象中的方法
    $cat1 -> act();

      类的相关:

      (1)   一个类可以创建多个对象

      (2)   不同的对象的标识符#编码,是不一样的,有系统在创建对象时分配的标识符,按编号的顺序分配

     构造方法:

               说明

    (1)           构造函数的访问修饰符可以是 public , protected, private , 一般情况下是public ,默认就是public

    (2)           __construct 是关键字,不能修改, __ 是两个_ 下划线。

    (3)           构造函数没有返回值, 即没有return,即使有了return也不会生效

    (4)           构造函数是系统调用的,程序员不能显示调用

      快速入门案例:

    class Person{
        public $name;
        public $age;
        public $food;
        //构造函数,括号中的$name,$age,$food表示形参
        public function __construct($name,$age,$food){
            //$this表示当前对象,谁调用则指向谁
            //讲传入的参数赋值给成员属性
            $this -> name = $name;
            $this -> age = $age;
            $this -> food = $food;
        }
    }
    //让系统自动调用构造函数创建一个对象$p1
    $p1 = new Person('张三',26,['汉堡','烤鸭']);

       注意事项:

      ①在创建一个类的新对象时,系统会自动的调用该类的构造方法完成对新对象的初始化

      ②构造函数的作用是完成对成员属性的初始化任务,而不是创建对象本身. 所以以后在oop编程中,需要对成员属性进行初始化,则将这段代码放在构造函数中即可

      ③在一个类中,构造函数有且只能有一个, 如果定义多个,就会报错.

    析构函数: 

      定义:析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行

      理解:

        ①某个对象的所有引用都被删除

      1. 使用unset(对象名), 将对象名销售
      2. $对象名 = null;
      3. $对象名 = 'abc'

        ②显式销毁

          上面写的三种方式,都是显式销毁, 所谓显式销毁就是程序员主动的删除对象引用.

          如果程序员不去显式销毁对象,那么在程序执行完毕后,这个对象就会被系统销毁,这个就是系统销毁

        ③则执行析构函数

      说明:

        (1)   析构函数都是public

        (2)   __destuct 是关键字,不要修改

        (3)   析构函数没有形式参数

        (4)   析构函数是系统调用

        (5)   析构函数在如下情况会被系统调用

      1. php文件执行完毕
      2. 某个对象的所有引用都被删除后, 马上就会调用析构函数

      快速入门案例:

    class Person{
        public $name;
        //构造函数
        public function __construct($name){
            $this -> name = $name;
        }
        //析构函数
        public function __destruct(){
            echo '<br>析构函数被调用' . $this -> name;
        }
    }
    $p1 = new Person('张三');
    $p2 = new Person('李四');
    $p3 = new Person('王五');
    //当显式销毁一个变量,比如:$p1 = null 、 $p1 = 'aaa'、isset($p1)的时候
    $p1 = null;
    echo "<br>---------------<br>";
    页面显示为:
    析构函数被调用张三
    ---------------
    析构函数被调用王五
    析构函数被调用李四

      注意:

      (1)   关于在析构函数中释放资源的问题,如果我们对效率没有很高很特殊的要求,完全可以不使用析构函数.

      (2)   如果我们不确定代码后面是否还会使用资源(比如链接),那么我们建议最好不要使用析构函数

      (3)   项目有特殊和明确的要求时,我们可以使用析构函数,显示的销毁对象是,在析构函数中,释放资源.

  • 相关阅读:
    TC SRM 591 (Div2. Practice only)
    SDL2 简单实现图片缩放移动查看
    Linux下socket编程 address already in use 问题
    POJ 2155 二维树状数组
    OJ开发笔记(1)
    开通博客啦~
    [转]STL transform算法中使用toupper函数
    Monkey and Banana HDU 1069
    Ignatius and the Princess IV HDU 1029
    Dungeon Master POJ 2251
  • 原文地址:https://www.cnblogs.com/rickyctbur/p/11031074.html
Copyright © 2011-2022 走看看