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函数
- 定义
- 使用关键字
function
开始 -
function
后面跟函数名 - 大括号中编写函数体
- 使用关键字
function say{
echo "hello world"
}
- 调用:函数名加参数
- 判断函数是否存在
function_exists("fn")
判断函数fn是否存在
PHP类与面向对象
类是抽象的概念,对象是具体的实例。类通过关键字class
定义,通过关键字new
来创建一个实例,通过->
访问对象的属性和方法
//定义一个类
class Car {
//属性
public $name = "汽车";
//方法
public function getName(){
//方法内部可以使用$this调用对象的方法和属性
return $this->name;
}
}
//创建一个对象
$car = new Car();
属性(方法)声明是由关键字public
,protected
,private
开头
-
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
伪变量。可以使用self
,parent
在内部调用静态方法与属性
访问控制
访问控制通过public
,protected
,private
关键字来实现。公有的类成员可以在任何地方被访问,受保护的类成员可以被其自身以及其子类和父类访问,私有的类成员只能被其定义所在的类访问。
类属性必须定义为公有、受保护、私有之一。
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;