PHP基础2

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)