PHP面向对象

技术文档网 2021-04-16

自动加载

  1. 唯一一个定义在类外的魔术方法(基本废弃)

    function __autoload($class)
    {
    require __DIR__.'/'.$class.'.php';
    }
    
  2. 新增spl_autoload_register函数(可以定义多个autoload函数,不会冲突) ```

Test1::test(); Test2::test();

function autoload1($class) { require DIR.'/'.$class.'.php'; }

function autoload2($class) { require DIR.'/'.$class.'.php'; }


### PSR-0规范
1. 命名空间必须与绝对路径一致
2. 类名首字母必须大写
3. 除入口文件外,其他“.php”必须只有一个类

## 有关PHP的数据结构
#### PHP的栈

$stack = new SplStack; $stack->push("data1\n"); $stack->push("data2\n");

echo $stack->pop(); echo $stack->pop();

#### PHP的队列

$queue = new SplQueue();

$queue->enqueue("data1\n"); $queue->enqueue("data2\n");

echo $queue->dequeue(); echo $queue->dequeue();

#### PHP的堆

$heap = new SplMinHeap();

$heap->insert("data1\n"); $heap->insert("data2\n");

echo $heap->extract(); echo $heap->extract();

#### PHP固定长度的数组

$array = new SplFixedArray(10);

$array[0] = 123; $array[9] = 1234;

var_dump($array);

## PHP的魔术方法
1. __get与__set方法

function __set($name, $value) { $this->array[$name] = $value;

}

function __get($name)
{
    var_dump(__METHOD__);
    return $this->array[$name];
}

2. __call与__callStatic方法

function __call($name, $arguments) { // TODO: Implement __call() method. var_dump($name, $arguments);

    return "magic function\n";
}

static function __callStatic($name, $arguments)
{
    // TODO: Implement __callStatic() method.
    var_dump($name, $arguments);
    return "magic function\n";
}
3.  __toString方法(被当成字符串时调用)

function __toString() { // TODO: Implement __toString() method. return "magic function\n"; }


4. __invoke方法(被当成函数时调用)

function __invoke() { return "invoke"; }



# 工厂模式
1. 通过创建一个工厂类,可以免除多次new对象

class Factory { static function createDatabase() { $db = new Database();

    return $db;
}

}


2. 需要创建对象时,直接调用工厂的静态方法

$db = \IMooc\Factory::createDatabase();


# 单例模式
1. 设置构造函数为私有方法,这样保证不能从外部创建

protected $db;

private function __construct() { }

2. 创建一个获取对象的静态方法,外部创建对象必须通过调用此方法

static function getInstance() { if (isset(self::$db)) { return self::$db; } else { self::$db = new self(); return self::$db;

    }
}
3. 与工厂模式结合

class Factory { static function createDatabase() { $db = Database::getInstance();

    return $db;
}

}


# 注册树模式
1.  创建一个注册类

相关文章

  1. 如何通过xhprof分析性能

    使用方法 xhprof_enable(); /** ... 要检查的php代码 ... **/ $xhprof_data = xhprof_disable(); // 引入xhprof_lib i

  2. LUMEN API Controller 规范

    1. 第三方依赖库规范 在使用LUMEN实现API接口时,以下库必须需要包含在composer包依赖中,以实现代码编写的一些规范 dingo/api : 实现API接口库 vlucas/phpdo

  3. PHP文件锁

    共享锁(LOCK_SH) 什么时候加共享锁? 当在读取数据的时候同时进行着其他的写操作,这个时候需要对文件加共享锁,否则无论有没有对写操作加写锁都会写入成功,导致数据不一致 当文件获得共享锁时,其他

  4. Hello-Risen-程序

    首先需要说明的是,您下载到的文件包含两部分,其中src中是开发源码,用于对Risen框架本身的开发,risen 目录中是通过源码生成的包含debug和release版本的框架程序,用于您应用程序的开发

  5. PHP自定义类示例(Weixin消息解析类)

    PHP自定义类示例(Weixin消息解析类) /** * Created by Qingger. * User: jsspf * Date: 2017/3/24 * Time: 10:50

随机推荐

  1. 如何通过xhprof分析性能

    使用方法 xhprof_enable(); /** ... 要检查的php代码 ... **/ $xhprof_data = xhprof_disable(); // 引入xhprof_lib i

  2. LUMEN API Controller 规范

    1. 第三方依赖库规范 在使用LUMEN实现API接口时,以下库必须需要包含在composer包依赖中,以实现代码编写的一些规范 dingo/api : 实现API接口库 vlucas/phpdo

  3. PHP文件锁

    共享锁(LOCK_SH) 什么时候加共享锁? 当在读取数据的时候同时进行着其他的写操作,这个时候需要对文件加共享锁,否则无论有没有对写操作加写锁都会写入成功,导致数据不一致 当文件获得共享锁时,其他

  4. Hello-Risen-程序

    首先需要说明的是,您下载到的文件包含两部分,其中src中是开发源码,用于对Risen框架本身的开发,risen 目录中是通过源码生成的包含debug和release版本的框架程序,用于您应用程序的开发

  5. PHP自定义类示例(Weixin消息解析类)

    PHP自定义类示例(Weixin消息解析类) /** * Created by Qingger. * User: jsspf * Date: 2017/3/24 * Time: 10:50