|
1 编程选择等宽字体
2 source code pro 字体
3 运行环境搭建,推荐 easyphp
4 关于命名空间:
面向对象的高级特性
介绍、使用:
namespace test1;
下面的所有代码都属于这个命名空间里面的。
调用:test1\funciton_name(); 即可。
5 类自动载入特性
function __autoload($class); // 以前是这么干的。
{
require __DIR__.'/'.$class.'.php';
}
// 后来被废纸了, 5.3以后用 spl_autoload_register('autoload1');
这样就不冲突了,防止不同框架之间的冲突。自己随便定义自动载入函数。
6 基础框架:
psr-0规范
1 命名空间必须与绝对路径一致
2 类名首字母大写
3 除了入口文件外的其它.php文件只有一个类,不能有可执行代码
开发符合psr-0规范的基础框架
1 全部使用命名空间
2 所有php文件必须自动载入,不能有include/require
3 单一入口
文件:
index.php
App 文件夹
imooc 文件夹
类名 文件名 命名空间 必须一致
注册 自动载入 类;include 包含进来。
7 数据结构
spl 数据结构 4种常用的数据结构
栈
$stack = new splstack(); 栈定义
$stack->push('data1');// 入栈
echo $stack->pop();//出栈
队列
$queue = new splQueue();
$queue->enqueue('data1');
$queue->enqueue('data2');
echo $queue->dequeue();
堆
$heap = new splMinHeap();//最小堆
$heap->insert('data1');//插入
echo $heap->extract();//提取
固定尺寸数组
$array = new splFixedArray(10);
$array[0] = 123;
$array[1] = 234;
var_dump($array);
8 链式操作
$db->where()->limit()->order();
class Database{
function where(){}
function order(){}
function limit(){}
}
传统:
$db->where();
$db->limit();
$db->order();
链式操作的核心就是:每个方法后,return $this;
class Database{
function where(){return $this;}
function order(){return $this;}
function limit(){return $this;}
}
9 魔术方法的使用
1 __get/__set 对象属性接管
2 __call/__callStatic 方法/静态方法 调用
3 __toString// 转换字符串
4 __invoke// 当成函数执行
对于对象不存在的属性的时候自动执行
class Object{
function __set($key,$value){
$this->array[$key] = $value;
}
function __get($key){
return $this->array($key);
}
}
对于对象不存在的方法的时候自动执行
class Object{
function __call($func,$param){
return 'magic function \n';
}
// 类的静态方法
static function __callStatic($func,$param){
return 'magic static function \n';
}
// echo $obj; 把类当作字符串用
function __toString(){
return __CLASS__;
}
//echo $obj($param); 把类当函数用
function __invoke($param){
return 'invoke';
}
}
10 基础设计模式
3种基本设计模式
工厂模式、单立模式、注册模式
工厂方法或类生成对象,而不是在代码中直接new
单例模式:使某个类的对象仅允许创建一个
注册模式:全局共享和交换对象。
工厂模式:工厂方法替换new 操作
class Factory{
static function createDatebase(){
$db = new Database();
return $db;
}
}
$db = IMooc\Factory::createDatabase();
方便统一修改变化;
单列模式: 防止资源浪费,一次创建
class Database
{
private $db;
private function __construct() //创建私有
{
}
static function getInstance()
{
if(self::$db){
return self::$db;
}else{
self::$db = new self();
return self::$db;
}
}
}
注册模式:
class Register{
protected static $objects;
function set($alias,$object){
self::$objects[$alias] = $object;
}
function get($name){
return self::$objects[$name];
}
function _unset($alias){
unset(self::$objects[$alias]);
}
}
用法:$db = Register::get('db1');
适配器模式:
1 适配器模式,可以将截然不同的函数接口封装成统一的API
2 实际应用举例,php的数据库操作有mysql,mysqli,pdo3种模式,可以统一成益智的接口
class mysql {}
class mysqli {}
class pdo{}
|
|
|