美文网首页
PHP基础2

PHP基础2

作者: 钢小牙 | 来源:发表于2016-11-28 20:26 被阅读0次

    PHP数组

    • 索引数组,数组的键是整数的数组,并且键的整数顺序是从0开始
    $arr = array("apple","orange","pear");
    print_r($arr);//输出数组建及对应的值
    

    结果为:

    Array
    (
        [0] => apple
        [1] => orange
        [2] => pear
    )
    
    • 关联数组,数组的键是字符串的数组
    $arr = array('apple'=>"苹果",'orange'=>"橘子",'pear'=>"梨子");
    print_r($arr);
    

    结果为:

    Array
    (
        [apple] => 苹果
        [orange] => 橘子
        [pear] => 梨子
    )
    

    创建数组

    • 使用array()函数
    $fruits = array('apple','orange');
    
    • 直接对数组变量赋值
    $fruits[]='pear';
    

    如果方括号中没有指定索引,则取当前最大整数索引值+1。如果当前还没有整数索引,则键名将为0。如果指定的键名已经有值了,该值将被覆盖

    • 使用range()创建指定范围单元的数组
    $num = range(1,10);
    

    PHP函数

    1. 定义
      • 使用关键字function开始
      • function后面跟函数名
      • 大括号中编写函数体
    function say{
        echo "hello world"
    }
    
    1. 调用:函数名加参数
    2. 判断函数是否存在
      function_exists("fn")判断函数fn是否存在

    PHP类与面向对象

    类是抽象的概念,对象是具体的实例。类通过关键字class定义,通过关键字new来创建一个实例,通过->访问对象的属性和方法

    //定义一个类
    class Car {
    //属性
        public $name  = "汽车";
        //方法
        public function getName(){
            //方法内部可以使用$this调用对象的方法和属性
            return $this->name;
        }
    
    }
    //创建一个对象
    $car = new Car();
    

    属性(方法)声明是由关键字publicprotectedprivate开头

    • public 公有(默认)
    • protected 受保护的
    • private 私有的

    受保护的属性(方法)和私有的属性(方法)不允许外部调用,在类的成员方法内部可以调用

    构造函数和析构函数

    • 构造函数
      PHP5可以在类中使用__construct()定义一个构造函数,构造函数会在对象创建时候调用,常用来对象创建时的初始化工作。
    class Car{
        function __construct(){
            ...
        }
    }
    $car = new Car();//实例化会调用__construct
    

    子类中定义了__construct则不会调用父类的__construct,如果需要调用父类的构造函数,需要使用parent::__construct()显示调用

    • 析构函数
      PHP5中使用_destruct(),定义,析构函数指的是当某个对象的所有引用被删除,或者对象被显示的销毁时会执行的函数。
    class Car{
        function __destruct(){
            ...
        }
    }
    $car = new Car();
    unset($car);//销毁时调用析构函数
    

    Static静态关键字

    静态属性和方法可以在不实例化类的情况下调用,直接使用类名::方法名的方式调用,静态属性不允许对象使用->操作符调用

    class Car {
        static $speed = 10;
    }
    echo Car::$speed;
    

    静态方法中不允许使用$this伪变量。可以使用selfparent在内部调用静态方法与属性

    访问控制

    访问控制通过publicprotectedprivate关键字来实现。公有的类成员可以在任何地方被访问,受保护的类成员可以被其自身以及其子类和父类访问,私有的类成员只能被其定义所在的类访问。
    类属性必须定义为公有、受保护、私有之一。

    calss Car{
        $speed = 10;//错误,属性必须定义访问控制
        public $name;  //定义公有属性
    }
    

    类的方法如果没有设置这些关键字,默认公有
    如果构造函数定义成了私有方法,则不允许直接实例化对象,可以通过静态方法实例化对象

    class Car{
        private function __construct(){
            ...
        }
        private static $_obj = null;
        public static function getInstance(){
            if(empty(self::$_obj))){
                self::$_obj = new Car();
            }
            return self::$_obj;
        }
    }
    //$car = new Car()//不允许直接实例化
    $car = Car::getInstance(); //通过静态方法获得一个实例
    

    对象继承

    使用extends实现类的继承,共享属性和方法

    class Truck extends Car{
        ...
    }
    //定义继承于Car的Truck类
    

    PHP对象的重载

    重载指的是动态的创建属性和方法。
    属性是通过魔术方法来实现。__set__get__isset__unset分别实现对不存在的属性的赋值,读取,判断属性是否设置,销毁属性。

    class Car {
        private $ary = array();
        
        public function __set($key, $val) {
            $this->ary[$key] = $val;
        }
        
        public function __get($key) {
            if (isset($this->ary[$key])) {
                return $this->ary[$key];
            }
            return null;
        }
        
        public function __isset($key) {
            if (isset($this->ary[$key])) {
                return true;
            }
            return false;
        }
        
        public function __unset($key) {
            unset($this->ary[$key]);
        }
    }
    $car = new Car();
    $car->name = '汽车';  //name属性动态创建并赋值
    echo $car->name;
    

    方法的重载通过__call来实现,当调用不存在的方法的时候,将会转为参数调用__call方法,当调用不存在的静态方法时会使用__callStatic重载

    class Car {
        public $speed = 0;
        
        public function __call($name, $args) {
            if ($name == 'speedUp') {
                $this->speed += 10;
            }
        }
    }
    $car = new Car();
    $car->speedUp(); //调用不存在的方法会使用重载
    echo $car->speed;
    

    相关文章

      网友评论

          本文标题:PHP基础2

          本文链接:https://www.haomeiwen.com/subject/akoopttx.html