WEB前端第五十四课——PHP基础⑵流程控制、类和对象、常量和变量、构造函数、继承

1.运算符

  PHP中运算符的用法与JS基本相同,

  需要注意的一点区别是:拼接符加号“+”与点号“.”用法不同,以及“+=”和“.=”的区别。

2.foreach 快速遍历

  foreach语句提供了快速遍历数组的简单方式,foreach仅能应用于数组和对象。

  如果应用于其他数据类型的变量或未初始化的变量,则会发出错误信息。

  语法:

    ⑴ foreach (array_expression as $value){ statment }

    或者

    ⑵ foreach (array_expression as $key=>$value){ statment }

  注意:

    第一种方式,遍历给定的array_expression数组,每次循环中,当前单元的值被赋给$value,

          并且数组内部的指针向前移一步,因此下一次循环中将会得到下一个单元;

    第二种方式,与第一种方式的区别在于,除了当前单元的值外,键名也会在每次循环中被赋给变量$key。

  代码示例(可与js中的 for in 语句进行类比):  

    $arr = ['大明','小芳','小毛','二丫'];
    foreach ($arr as $key => $value){
        echo $key,$value,'<br>';
    }

3.include 与 require

  二者都表示包含并运行指定文件。

  未找到文件时,include会发出一条警告,require会发出一个致命错误。

  语法:

    include '文件名|文件路径';

  注意:

    当一个文件被包含时,其中所包含的代码继承了include所在行的变量范围;

    从该位置开始,调用文件在改行处可用的任何变量在被调用的文件中都可以使用;

    所有在包含文件中定义的函数和类都具有全局作用域。

  代码示例:  

    echo 'My girlfriend named $myGirla';    //会报错变量不存在。
    include 'girlfriendlist.php';    //引入外部PHP文件。
    echo 'My girlfriend named $myGirlb';    //My girlfriend name XiaoFang.

4.PHP函数

  PHP中的函数j结构与JS中的函数结构的语法特征基本相同。

  但PHP中的函数作用域与JS中的函数还是存在一定差别,如PHP中函数外部定义的变量在函数内部不能直接调用。

  在PHP函数内部使用外部定义的全局变量时,需要使用 global再次声明。  

    $girlName = 'Laura';
    function test(){
        global $girlName;
        echo "A girl named $girlName .";
    }
    test();

5.PHP中的类

  PHP中的类使用关键词 class 定义,类名后使用花括号,在括号内定义类的属性和方法。

  语法:class 类名 { 类内部语句 }

  说明:

    ① 类名可以是任何非PHP保留字的合法标签,

      一个合法的类名必须以字母或下划线开头,其他部分可以是字母、数字或下划线;

    ② 一个类可以包含有属于自己的常量、变量(属性)和函数(方法)。

6.PHP中的对象

  PHP中使用关键字 new 创建一个类的实例,类应在被实例化之前定义。

  语法:$对象名 = new 类名();

  说明:

    ① 创建对象时,“new 类名”后的小括号可有可无;

    ② 对象之间的传值仍然是赋值传递,只不过传递的内容是一个内存地址。

7.PHP中类的属性与属性类型关键词

  类内部的变量成员成为属性,或字段、特征。

  由关键词 public、protected 或 private开头,然后跟一个普通的变量声明构成。

  语法:

    class 类名 {

      属性关键词 $变量名(属性名)= 属性值;

      属性关键词 function 方法名(参数1,参数2,…){ 方法内容语句 }

    }

  说明:

    ① 属性中的变量可以初始化,但初始化的值必须是常数;

    ② 类的属性和方法如果没有写明类型关键词,字默认为公共;

      public ,被定义为公有的类成员,可以在任何地方被访问;

      protected,被定义为受保护的类成员,可以被类自身以及其子类或父类访问;

      private,被定义为私有属性的类成员,只能在所在类内部访问。

    ③ 在类的成员方法中,可以使用符号“->”(对象运算符)来访问非静态属性。

  代码示例:

    class Person {              //通常类名首字母大写
        public $perName = 'firstName';      //定义公有属性(变量)
        function introduction(){            //定义公有函数(方法)
            echo 'hello everyone.';
        }
        private $perAge = 23;               //声明私有函数(方法)
        function getAge(){
//    必须通过“this”伪类的形式调用属性,this表示当前正在使用这个方法的对象实例。
            echo $this -> perAge ;
        }
    }
    $Susan = new Person;            //实例化一个 Person类的对象
    print_r($Susan);
    $Susan ->perName = 'Susan';     //修改对象的公有属性值。
    echo $Susan -> perName;
    $Susan -> introduction();
    echo '<br>';
//    echo $Susan -> perAge;    无法直接访问私有变量
    $Susan -> getAge() ;
    //通过特权函数(公有方法)间接访问私有属性,调用函数内部的私有方法也是同样道理。

8.PHP中的类常量与静态变量

  PHP中的类常量和静态变量是存在于类结构中的两个不同于常见属性的结构。

  类常量使用关键词“const”声明,静态变量使用关键词“static”声明。

  语法:

    class 类名{

      const 类常量(没有$开头)= 简单值;

      static 静态变量(有$开头)= 简单值;

    }

  说明:

    ① 由 const声明的常量,一经声明,变量值不允许发生任何改变;

    ② 由 static声明的静态变量的语句,仅在类被声明的时候执行一次,但可以修改;

    ③ 无论是 const声明的常量还是 static声明的静态变量,两者都使用符号“::”(双冒号)调用;

    ④ 两者在调用的时候均可以不实例化对象,直接通过类名调用。

    class Person {
        const perName = 'Candy';
        static $perAge = 22;
    }
    echo Person::perName;
    echo Person::$perAge;
    //    Person::perName = Susan;      静态常量不能修改变量值!!!
    Person::$perAge+=1;
    echo '<br>';
    $Girl = new Person ;
    echo $Girl::perName;
    echo $Girl::$perAge;        //静态变量只在类初始化是执行一次,因此实例化后的 $perAge=23.
    echo '<br>';
    echo $Girl ::$perAge ;

9.PHP中类的构造函数

  构造函数是类在实例化对象的时候自动执行,用来帮助类进行构造对象的函数。

  PHP为所有的类都提供了一个和类名完全相同的隐藏构造函数。

  可以通过显示编写或通过“__construct”(双下划綫)函数来主动编辑。

  语法:

    class 类名{

      function __construct(){ 主动修改的代码 }

      function 类名(){ 主动修改的代码 }

    }

  说明:

    两种写法都能够实现构造函数的主动编辑,但系统自动踢狗的是第二种结构。

 10.PHP中类的继承

  继承也称为类扩展。是指子类会继承父类所有公有的和受保护的属性方法。

  PHP中使用关键词“extends”来实现继承。

  语法:class 子类名 extends 父类名 { 子类结构语句 }

  说明:

    ① 除非子类覆盖类父类的方法,否则被继承的方法都会保留其原有功能;

    ② 继承对于功能的设计和抽象都非常有用,避免编写大量的重复公有结构;

    ③ 对于公有属性和方法的继承,子类可以直接随意使用,

      对于受保护的属性和方法的继承,可以在“父类或子类的内部”使用,

      对于私有的属性和方法,子类不能够继承。

  代码示例:

    class FatherList {
        public $top1Pub = 'Rebecca';
        protected $top2Pro ='Emmy';
        private $top3Pri ='Abbie';
        public function fatherPublicEx() {
            echo $this -> top1Pub.'<br>';
            echo $this -> top2Pro.'<br>';
            echo $this -> top3Pri.'<br>';
        }
        protected function fatherProtectedEx() {
            echo $this -> top1Pub.'<br>';
            echo $this -> top2Pro.'<br>';
            echo $this -> top3Pri.'<br>';
        }
        private function fatherPrivateEx() {
            echo $this -> top1Pub.'<br>';
            echo $this -> top2Pro.'<br>';
            echo $this -> top3Pri.'<br>';
        }
    }
    $List = new FatherList;
    $List -> fatherPublicEx();
//    $List -> fatherProtectedEx();
//    $List -> fatherPrivateEx();       受保护和私有方法外部不能访问!
    class SonList extends FatherList {
        public function sonListEx(){
            echo $this -> top1Pub.'<br>';
            echo $this -> top2Pro.'<br>';
//            echo $this -> top3Pri.'<br>';     私有属性无法继承获得。
            $this -> fatherPublicEx();      //公有方法可以继承获得。
            $this -> fatherProtectedEx();   //受保护方法可以继承获得。
//            $this -> fatherPrivateEx();   私有方法不可以继承获得。
        }
    }
    $SList = new SonList;
    $SList -> sonListEx();

  

posted @ 2021-01-05 14:38  后来喵  阅读(205)  评论(0编辑  收藏  举报