0%

PHP知识点整理(一)

一、几个输出语句的区别

  1. echo
    echo没有返回值,只接受一个参数,可以不使用括号
    1
    2
    3
    4
    5
    6
    7
    <?php
    $a = echo("Hello World"); // 错误,因为 echo 没返回值,不能用来赋值
    echo "Hello World"; // 正确,输出 Hello World
    echo ("Hello World"); //正确,输出 Hello World
    echo ("Hello","Wrold"); //错误,因为传递多个参数的时候不能用括号
    echo "Hello"," World"," is", " web"; // 正确,不用括号的时候可以用逗号隔开多个值
    ?>
  2. print
    和echo几乎一样,但是print有返回值1,虽然没啥用,但是因此会比echo效率低一点
    1
    2
    3
    4
    5
    <?php
    $x = print("Hello World"); // 输出 Hello World
    echo $x; // 输出 1
    print "Hello World"; //输出 Hello World
    ?>
  3. printf
    printf主要用来格式化字符串
    1
    2
    3
    4
    <?php
    printf("First %s %s。","hello", "world"); // First hello world
    printf("This is %1\$s %1\$s","A", "B"); //输出 This is A A,因为只显示第一个参数两次,而没有用到第二个参数
    ?>
  4. sprintf
    和printf一样,但是没有输出,而只是格式化字符串
    1
    2
    3
    4
    <?php
    printf(“First %s %s。”,”hello”, “world”); // First hello world
    printf(“This is %1\$s %1\$s”,”A”, “B”); //输出 This is A A,因为只显示第一个参数两次,而没有用到第二个参数
    ?>
  5. print_r
    主要用来将数组、对象等数据类型以更易展示的形式输出来
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?php
    $a = array ('a' => 'A', 'b' => 'B', 'c' => array ('a','b','c'));
    print_r ($a);
    ?>
    结果如下:
    Array
    (

    [a] => A
    [b] => B

    [c] => Array
    (

    [0] => a
    [1] => b
    [2] => c
    )
    )
  6. var_dump
    用于调试,还会把变量的内容和类型输出来,还有长度也会输出来
    1
    2
    3
    4
    5
    6
    <?php 
    $a=1.5;
    var_dump($a); //float(1.5)
    $a=2;
    var_dump($a); //int(2)
    ?>

二、单引号和双引号的区别

  1. 单引号只支持 \’和\转义,而双引号支持更多的转义
  2. 单引号不会解析变量值,双引号会
    1
    2
    3
    4
    5
    6
    7
    <?php
    $age = 20;
    $str1 = 'I am $age years old';

    $str2 = "I am $age years old";

    echo $str1,'<br />'; //输出: I am $age years old;
    echo $str2,'<br />'; // 输出:I am 20 years old;
    ?>
  3. 单引号比双引号快

    三、“::”、”->”和”=>”的区别

  4. “::”运算符是调用一个类中的静态成员的方法
    1
    2
    3
    4
    class test{
    protected static $instance;
    self::$instance = “abc”;
    }
  5. ”->”是操作类中成员变量或者方法的方法
    1
    2
    3
    4
    class test{
    private $test;
    $this->test = “abc”;
    }
  6. “=>”是映射数组中key和value时候使用的

四、构造函数和析构函数

  1. __construct 实例化对象的时候会被调用
  2. __destruct 对象呗销毁的时候被调用,因为PHP只会释放对象所占用的内存和相关资源,而由程序员自己申请的资源需要自己释放
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class Test{
    protected $file = NULL;
    function __construct(){
    $this->file = fopen(“test.txt”,”r”);
    }
    function __destruct(){
    fclose($this->file);
    }
    }

五、__call()和__callStatic()

  1. __call(),当调用一个不可访问的方法时会调用这个方法。
  2. __callStatic(),当调用的静态方法不存在或者权限不足的时候,会调用这个方法
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class Test 
    {
    public function __call ($name, $arguments) {
    echo “调用对象方法 ‘$name’ “. implode(‘, ‘,$arguments). “\n”;
    }
    public static function __callStatic ($name, $arguments) {
    echo “调用静态方法 ‘$name’ “. implode(‘, ‘, $arguments). “\n”; }
    }
    $obj = new Test;
    $obj->method1(‘参数 1’); //调用对象方法 'method1' 参数 1
    Test::method2(‘参数 2’); //调用静态方法 'method2' 参数 2

六、值传递和引用传递

  1. 值传递,在方法调用中,实参会把它的值传递给形参,形参只是用实参的值初始化一个存储单元,所以实参和形参有相同的值,却有着不同的存储单元
  2. 引用传递,传递的是对象的引用,形参和实参指向的是同一块地址

七、public、private和protected的区别

  1. public表示全局可以访问,比如类内部、外部和子类
  2. protected表示受保护的,只有本类和子类可以访问
  3. private表示私有的,只有本类内部可以访问

八、继承

  1. 通过用一个extends来继承基类的方法和成员。
  2. 子类只能继承父类的非私有(包括public和protected)成员变量和方法
  3. 当子类中定义的成员变量和父类中定义的成员变量同名时,子类中的成员变量会覆盖 父类的成员变量
  4. 当子类中的方法与父类中的方法有相同的方法签名(相同的方法名,相同的参数个数 与类型)时,子类将会覆盖父类的方法,而不是重载。

接下来准备研究

  1. 各种排序方法的内部实现,sort(),ksort(),asort(),arsort(),rsort()
  2. extends 和 implements 的区别
  3. require 和 require_once 还有 include

Welcome to my other publishing channels