慕课网--PHP进阶篇:http://www.imooc.com/learn/26php
---------------------------------------------------------------------数据库
第1章 数组:设计模式
一、PHP数组定义数组
数组就是一个键值对组成的语言结构,键相似于酒店的房间号,值相似于酒店房间里存储的东西。app
二、数组之索引数组初始化函数
PHP有两种数组:索引数组、关联数组。ui
索引和关联两个词都是针对数组的键而言的。this
索引数组是指数组的键是整数的数组,而且键的整数顺序是从0开始,依次类推。spa
三、PHP数组之索引数组赋值设计
索引数组赋值有三种方式:
第一种:用数组变量的名字后面跟一个中括号的方式赋值,固然,索引数组中,中括号内的键必定是整数。好比,$arr[0]='苹果';
第二种:用array()
建立一个空数组,使用=>
符号来分隔键和值,左侧表示键,右侧表示值。固然,索引数组中,键必定是整数。好比,array('0'=>'苹果');
第三种:用array()
建立一个空数组,直接在数组里用英文的单引号'
或者英文的双引号"
赋值,数组会默认创建从0开始的整数的键。好比array('苹果');
这个数组至关于array('0'=>'苹果');
四、PHP数组之访问索引数组内容
用数组变量的名字后跟的中括号中的键,来访问数组中的值。
五、PHP数组之for循环访问索引数组里的值
for循环能够将数组里的全部值都访问到,用for循环访问索引数组里的值;
六、PHP数组之foreach循环访问索引数组里的值
foreach循环能够将数组里的全部值都访问到,用foreach循环访问索引数组里的值。
七、PHP数组之关联数组初始化
关联数组是指数组的键是字符串的数组。
八、PHP数组之关联数组赋值
第一种:用数组变量的名字后面跟一个中括号的方式赋值,固然,关联数组中,中括号内的键必定是字符串。好比,$arr['apple']='苹果';
第二种:用array()
建立一个空数组,使用=>
符号来分隔键和值,左侧表示键,右侧表示值。固然,关联数组中,键必定是字符串。好比,array('apple'=>'苹果');
九、PHP数组之访问关联数组内容
用数组变量的名字后跟中括号+键的方式来访问数组中的值,键使用单引号或者双引号括起来。
<?php
//从数组变量$arr中,读取键为apple的值
$arr = array('apple'=>"苹果",'banana'=>"香蕉",'pineapple'=>"菠萝");
$arr0 = $arr['apple'];
if( isset($arr0) ) {print_r($arr0);}
?>
十、PHP数组之foreach循环访问关联数组里的值
foreach循环能够将数组里的全部值都访问到,用foreach循环访问关联数组里的值。
<?php
$fruit=array('apple'=>"苹果",'banana'=>"香蕉",'pineapple'=>"菠萝");
foreach($fruit as $key=>$value){
echo '<br>键是:'.$key.',对应的值是:'.$value;
}
?>
第2章 类与面向对象:
一、PHP类和对象
类是面向对象程序设计的基本概念,通俗的理解类就是对现实中某一个种类的东西的抽象, 好比汽车能够抽象为一个类,汽车拥有名字、轮胎、速度、重量等属性,能够有换挡、前进、后退等操做方法。
一般定义一个汽车类的方法为:
class Car {
$name = '汽车';
function getName() {
return $this->name;
}
}
类是一类东西的结构描述,而对象则是一类东西的一个具体实例,例如汽车这个名词能够理解为汽车的总类,但这辆汽车则是一个具体的汽车对象。
对象经过new关键字进行实例化:
$car = new Car();
echo $car->getName();
类与对象看起来比较类似,但实际上有本质的区别,类是抽象的概念,对象是具体的实例。类可使程序具备可重用性。
二、PHP类和对象之建立一个对象
类的定义方法,类经过关键字class开头,而后是类名与花括号,在花括号中定义类的属性与方法。
类名必须是字母或下划线开头,后面紧跟若干个字母、数字或下划线,类名最好可以表意,能够采用名词或者英文单词。
//定义一个类
class Car {
//定义属性
public $name = '汽车';
//定义方法
public function getName() {
//方法内部可使用$this伪变量调用对象的属性或者方法
return $this->name;
}
}
要建立一个类的实例,可使用new关键字建立一个对象。
$car = new Car(); //也能够采用变量来建立 $className = 'Car'; $car = new $className();
三、PHP类和对象之类的属性
在类中定义的变量称之为属性,一般属性跟数据库中的字段有必定的关联,所以也能够称做“字段”。
属性声明是由关键字 public,protected 或者 private 开头,后面跟一个普通的变量声明来组成。
属性的变量能够设置初始化的默认值,默认值必须是常量。
访问控制的关键字表明的意义为:
public:公开的
protected:受保护的
private:私有的
class Car {
//定义公共属性
public $name = '汽车';
//定义受保护的属性
protected $corlor = '白色';
//定义私有属性
private $price = '100000';
}
默认都为public,外部能够访问。通常经过->对象操做符来访问对象的属性或者方法,对于静态属性则使用::双冒号进行访问。当在类成员方法内部调用的时候,可使用$this伪变量调用当前对象的属性。
注意:带有 $ 符号的字段被认为是变量,而实例化后的对象认为是一个变量因此使用 $object 这种形式,而属性在类中能够看作是一个变量,因此属性在类中定义的时候须要加上 $ 符,而在对象中,属性是对象的一部分,因此使用 $object->value 这种形式区分。
四、PHP类和对象之定义类的方法
方法就是在类中的function,不少时候咱们分不清方法与函数有什么差异,在面向过程的程序设计中function叫作函数,在面向对象中function则被称之为方法。
同属性同样,类的方法也具备public,protected 以及 private 的访问控制。
访问控制的关键字表明的意义为:
public:公开的
protected:受保护的
private:私有的
能够这样定义方法:
class Car {
public function getName() {
return '汽车';
}
}
$car = new Car();
echo $car->getName();
使用关键字static修饰的,称之为静态方法,静态方法不须要实例化对象,能够经过类名直接调用,操做符为双冒号::。
class Car {
public static function getName() {
return '汽车';
}
}
echo Car::getName(); //结果为“汽车”
五、PHP类和对象之构造函数和析构函数
PHP5能够在类中使用__construct()定义一个构造函数,具备构造函数的类,会在每次对象建立的时候调用该函数,所以经常使用来在对象建立的时候进行一些初始化工做。
class Car { function __construct() {
print "构造函数被调用\n";
}
}
$car = new Car(); //实例化的时候 会自动调用构造函数__construct,这里会输出一个字符串
在子类中若是定义了__construct则不会调用父类的__construct,若是须要同时调用父类的构造函数,须要使用parent::__construct()显式的调用。
class Car { function __construct() {
print "父类构造函数被调用\n";
}
}
class Truck extends Car {
function __construct() {
print "子类构造函数被调用\n";
parent::__construct();
}
}
$car = new Truck();
PHP5支持析构函数,使用__destruct()进行定义,析构函数指的是当某个对象的全部引用被删除,或者对象被显式的销毁时会执行的函数。
class Car {
function __construct() {
print "构造函数被调用 \n";
}
function __destruct() {
print "析构函数被调用 \n";
}
}
$car = new Car(); //实例化时会调用构造函数
echo '使用后,准备销毁car对象 \n';
unset($car); //销毁时会调用析构函数
当PHP代码执行完毕之后,会自动回收与销毁对象,所以通常状况下不须要显式的去销毁对象。
六、PHP类和对象之Static静态关键字
静态属性与方法能够在不实例化类的状况下调用,直接使用类名::方法名
的方式进行调用。静态属性不容许对象使用->操做符调用。
class Car {
private static $speed = 10;
public static function getSpeed() {
return self::$speed;
}
}
echo Car::getSpeed(); //调用静态方法
静态方法也能够经过变量来进行动态调用:
$func = 'getSpeed';
$className = 'Car';
echo $className::$func(); //动态调用静态方法
静态方法中,$this伪变量不容许使用。可使用self,parent,static在内部调用静态方法与属性。
class Car {
private static $speed = 10;
public static function getSpeed() {
return self::$speed;
}
public static function speedUp() {
return self::$speed+=10;
}
}
class BigCar extends Car {
public static function start() {
parent::speedUp();
}
}
BigCar::start();
echo BigCar::getSpeed();
七、PHP类和对象之访问控制
访问控制经过关键字public,protected和private来实现。
被定义为公有的类成员能够在任何地方被访问。被定义为受保护的类成员则能够被其自身以及其子类和父类访问。被定义为私有的类成员则只能被其定义所在的类访问。
类属性必须定义为公有、受保护、私有之一。为兼容PHP5之前的版本,若是采用 var 定义,则被视为公有。
类中的方法能够被定义为公有、私有或受保护。若是没有设置这些关键字,则该方法默认为公有。
若是构造函数定义成了私有方法,则不容许直接实例化对象了,这时候通常经过静态方法进行实例化,在设计模式中会常用这样的方法来控制对象的建立,好比单例模式只容许有一个全局惟一的对象。
class Car {
private function __construct() {
echo 'object create';
}
private static $_object = null;
public static function getInstance() {
if (empty(self::$_object)) {
self::$_object = new Car(); //内部方法能够调用私有方法,所以这里能够建立对象
}
return self::$_object;
}
}
//$car = new Car(); //这里不容许直接实例化对象
$car = Car::getInstance(); //经过静态方法来得到一个实例
八、类和对象之对象继承
继承是面向对象程序设计中经常使用的一个特性,汽车是一个比较大的类,咱们也能够称之为基类,除此以外,汽车还分为卡车、轿车、东风、宝马等,由于这些子类具备不少相同的属性和方法,能够采用继承汽车类来共享这些属性与方法,实现代码的复用。
九、PHP类和对象之重载
PHP中的重载指的是动态的建立属性与方法,是经过魔术方法来实现的。属性的重载经过__set,__get,__isset,__unset来分别实现对不存在属性的赋值、读取、判断属性是否设置、销毁属性。
方法的重载经过__call来实现,当调用不存在的方法的时候,将会转为参数调用__call方法,当调用不存在的静态方法时会使用__callStatic重载。
十、PHP类和对象之对象的高级特性
对象比较,当同一个类的两个实例的全部属性都相等时,可使用比较运算符==进行判断,当须要判断两个变量是否为同一个对象的引用时,可使用全等运算符===进行判断。
对象复制,在一些特殊状况下,能够经过关键字clone来复制一个对象,这时__clone方法会被调用,经过这个魔术方法来设置属性的值。
对象序列化,能够经过serialize方法将对象序列化为字符串,用于存储或者传递数据,而后在须要的时候经过unserialize将字符串反序列化成对象进行使用。