当前位置:  编程技术>php
本页文章导读:
    ▪php中set_include_path与get_include_path例子      php中set_include_path与get_include_path例子,注意仔细看其中的注释,希望对朋友们有所帮助。 说明:set_include_path 设置默认包含路径,在include或require文件的时候,先在默认包含路径里面找,然后.........
    ▪php常用的三种设计模式的学习笔记      本文为大家介绍常用的三种php设计模式:单例模式、工厂模式、观察者模式,有需要的朋友可以参考下。 一、首先来看,单例模式 所谓单例模式,即在应用程序中只会有这个类的一个实例存.........
    ▪php中的include()与require()的对比分析      php的require()与include(),在性能方面并无大的不同。 仅有的一些不同在于: include()执行时文件每次都要进行读取和评估; require()执行时文件只处理一次(实际上,文件内容替换了require()语句.........

[1]php中set_include_path与get_include_path例子
    来源: 互联网  发布时间: 2013-12-24

php中set_include_path与get_include_path例子,注意仔细看其中的注释,希望对朋友们有所帮助。

说明:set_include_path 设置默认包含路径,在include或require文件的时候,先在默认包含路径里面找,然后在同目录下找。
以xampp环境为例,例子:
D:/xampp/htdocs/test/include 下有一文件为cls.mysqli.php
D:/xampp/htdocs/test/  下有一文件为set_include_path.php
内容为:
 

代码如下:

set_include_path('/xampp/htdocs/test/include');  //请注意php里边的'/'代表的不是网站根目录,而是文件所在的盘符,可用echo realpath('/');查看
//若php版本过低,该函数不支持,可用通用版ini_set()

/*查看真实默认包含路径*/
echo realpath(get_include_path());
/*要包含cls.mysqli.php只需要*/
require_once('cls.mysqli.php');
$mysql = new Mysql('localhost','root','','test');  //实例化和之后的查询语句并无错误


    
[2]php常用的三种设计模式的学习笔记
    来源: 互联网  发布时间: 2013-12-24

本文为大家介绍常用的三种php设计模式:单例模式、工厂模式、观察者模式,有需要的朋友可以参考下。

一、首先来看,单例模式

所谓单例模式,即在应用程序中只会有这个类的一个实例存在。
通常单例模式用在仅允许数据库访问对象的实例中,从而防止打开多个数据库连接。

一个单例类应包括以下几点:
和普通类不同,单例类不能被直接实例化,只能是由自身实例化。因此,要获得这样的限制效果,构造函数必须标记为private。
要让单例类不被直接实例化而能起到作用,就必须为其提供这样的一个实例。因此,就必须要让单例类拥有一个能保存类的实例的私有静态成员变量和对应的一个能访问到实例的公共静态方法。
在PHP中,为防止对单例类对象的克隆来打破单例类的上述实现形式,通常还为基提供一个空的私有__clone()方法。
单例模式的例子:
 

代码如下:

<?php
class SingetonBasic {
private static $instance;

// other vars..

private function __construct() {
// do construct..
}

private function __clone() {}

public static function getInstance() {
if (!(self::$instance instanceof self)) {
self::$instance = new self();
}
return self::$instance;
}

// other functions..
}

$a = SingetonBasic::getInstance();
$b = SingetonBasic::getInstance();
var_dump($a === $b);

二、工厂模式
工厂模式在于可以根据输入参数或者应用程序配置的不同来创建一种专门用来实现化并返回其它类的实例的类。
工厂模式的例子:
 

代码如下:

<?php
class FactoryBasic {
public static function create($config) {

}
}

比如这里是一个描述形状对象的工厂,它希望根据传入的参数个数不同来创建不同的形状。
 

代码如下:

<?php

// 定义形状的公共功能:获取周长和面积。
interface IShape {
function getCircum();
function getArea();
}

// 定义矩形类
class Rectangle implements IShape {
private $width, $height;

public function __construct($width, $height) {
$this->width = $width;
$this->height = $height;
}

public function getCircum() {
return 2 * ($this->width + $this->height);
}

public function getArea() {
return $this->width * $this->height;
}
}

// 定义圆类
class Circle implements IShape {
private $radii;

public function __construct($radii) {
$this->radii = $radii;
}

public function getCircum() {
return 2 * M_PI * $this->radii;
}

public function getArea() {
return M_PI * pow($this->radii, 2);
}
}

// 根据传入的参数个数不同来创建不同的形状。
class FactoryShape {
public static function create() {
switch (func_num_args()) {
case 1:
return new Circle(func_get_arg(0));
break;
case 2:
return new Rectangle(func_get_arg(0), func_get_arg(1));
break;

}
}
}

// 矩形对象
$c = FactoryShape::create(4, 2);
var_dump($c->getArea());
// 圆对象
$o = FactoryShape::create(2);
var_dump($o->getArea());

使用工厂模式使得在调用方法时变得更容易,因为它只有一个类和一个方法,若没有使用工厂模式,则要在调用时决定应该调用哪个类和哪个方法;使用工厂模式还使得未来对应用程序做改变时更加容易,比如要增加一种形状的支持,只需要修改工厂类中的create()一个方法,而没有使用工厂模式,则要修改调用形状的代码块。

三、观察者模式
观察者模式为您提供了避免组件之间紧密耦合的另一种方法。该模式非常简单:一个对象通过添加一个方法(该方法允许另一个对象,即观察者注册自己)使本身变得可观察。当可观察的对象更改时,它会将消息发送到已注册的观察者。这些观察者使用该信息执行的操作与可观察的对象无关。结果是对象可以相互对话,而不必了解原因。

一个简单的示例:当听众在收听电台时(即电台加入一个新听众),它将发送出一条提示消息,通过发送消息的日志观察者可以观察这些消息。
 

代码如下:

<?php
// 观察者接口
interface IObserver {
function onListen($sender, $args);
function getName();
}

// 可被观察接口
interface IObservable {
function addObserver($observer);
function removeObserver($observer_name);
}

// 观察者类
abstract class Observer implements IObserver {
protected $name;

public function getName() {
return $this->name;
}
}

// 可被观察类
class Observable implements IObservable {
protected $observers = array();

public function addObserver($observer) {
if (!($observer instanceof IObserver)) {
return;
}
$this->observers[] = $observer;
}

public function removeObserver($observer_name) {
foreach ($this->observers as $index => $observer) {
if ($observer->getName() === $observer_name) {
array_splice($this->observers, $index, 1);
return;
}
}
}
}

// 模拟一个可以被观察的类:RadioStation
class RadioStation extends Observable {

public function addListener($listener) {
foreach ($this->observers as $observer) {
$observer->onListen($this, $listener);
}
}
}

// 模拟一个观察者类
class RadioStationLogger extends Observer {
protected $name = 'logger';

public function onListen($sender, $args) {
echo $args, ' join the radiostation.<br/>';
}
}

// 模拟另外一个观察者类
class OtherObserver extends Observer {
protected $name = 'other';
public function onListen($sender, $args) {
echo 'other observer..<br/>';
}
}

$rs = new RadioStation();

// 注入观察者
$rs->addObserver(new RadioStationLogger());
$rs->addObserver(new OtherObserver());

// 移除观察者
$rs->removeObserver('other');

// 可以看到观察到的信息
$rs->addListener('cctv');
?>


    
[3]php中的include()与require()的对比分析
    来源: 互联网  发布时间: 2013-12-24

php的require()与include(),在性能方面并无大的不同。
仅有的一些不同在于:
include()执行时文件每次都要进行读取和评估;
require()执行时文件只处理一次(实际上,文件内容替换了require()语句)。
即如果有包含这些指令之一的代码和可能执行多次的代码,则使用require()效率比较高。

另外,如果每次执行代码时要读取不同的文件,或有通过一组文件叠代的循环,就应该使用include(),因为可以给想要包括的文件名设置一个变量,当参数为include()时使用这个变量。


    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,