本文目录一览:
php中有哪些设计模式,举例说明应用场景
PHP 一般有五种常见的设计模式
工厂模式
它具有创建对象的某些方法。可以使用工厂类创建对象,而不直接使用 new。
例如:
?php
interface IUser
{
function getName();
}
class User implements IUser
{
public function __construct( $id ) { }
public function getName()
{
return "Jack";
}
}
class UserFactory
{
public static function Create( $id )
{
return new User( $id );
}
}
$uo = UserFactory::Create( 1 );
echo( $uo-getName()."\n" );
?
另外四种是:观察者模式,单元素模式,命令链模式,策略模式。例子可以百度一搜。
怎么理解php中的设计模式
1、单例模式:PHP中的对象生存期间是从该脚本开始一直到该脚本结束为止,因此PHP的单例模式只是在一个页面中(这里可能包含很多其他页面,不是狭义的单页面)多次用到该对象时才会起作用,多次用到时不去重复的new对象(多个人做一个项目时,难免会碰到一次请求中多次实例一个对象的情况),将不会耗费不必要的资源(数据控连接操做效果很明显),还有一点就是可以保证整个脚本中都是同一个对象,这种模式是怎么实现的呢,他的实现有几个要注意的点:
a. 首先就是要将__construct()方法定义为私有方法,这样就不能通过new来得到一个新的实例了,单例模式不能在外部进行实例化,这能字自身内部进行实例化;
PHP设计模式之单例模式
单例模式
:使得类的一个对象成为系统中的唯一实例.
PHP中使用单例模式最常见的就是数据库操作了。避免在系统中有多个连接数据库的操作,浪费系统资源的现象,就可以使用单例模式。每次对数据库操作都使用一个实例。
简单示例
class
AClass
{
//
用来存储自己实例
public
static
$instance;
//
私有化构造函数,防止外界实例化对象
private
function
__construct()
{}
//
私有化克隆函数,防止外界克隆对象
private
function
__clone()
{}
//
静态方法,单例访问统一入口
public
static
function
getInstance()
{
if
(!(self::$instance
instanceof
self)){
self::$instance
=
new
self();
}
return
self::$instance;
}
//
test
public
function
test()
{
return
"done";
}
//
私有化克隆函数,防止外界克隆对象
private
function
__clone()
{}
}
class
BClass
extends
AClass{
}
//
获取实例
$aclass
=
AClass::getInstance();
$bclass
=
BClass::getInstance();
//
调用方法
echo
$aclass-test();
对一些比较大型的应用来说,可能连接多个数据库,那么不同的数据库公用一个对象可能会产生问题,比如连接句柄的分配等,我们可以通过给$instance变成数组,通过不同的参数来控制
简单示例
class
DB
{
//
用来存储自己实例
public
static
$instance
=
array();
public
$conn;
//
私有化构造函数,防止外界实例化对象
private
function
__construct($host,
$username,
$password,
$dbname,
$port)
{
$this-conn
=
new
mysqli($host,
$username,
$password,
$dbname,
$port);
}
//
静态方法,单例访问统一入口
public
static
function
getInstance($host,
$username,
$password,
$dbname,
$port)
{
$key
=
$host.":".$port;
if
(!(self::$instance[$key]
instanceof
self)){
self::$instance[$key]
=
new
self($host,
$username,
$password,
$dbname,
$port);#实例化
}
return
self::$instance[$key];
}
//query
public
function
query($ql)
{
return
$this-conn-query($sql);
}
//
私有化克隆函数,防止外界克隆对象
private
function
__clone()
{}
//释放资源
public
function
__destruct(){
$this-conn-close();
}
}
PHP中怎样创建一个空对象
1、打开php的编辑器,进入主页面,首先我们新建好一个php文件,然后写上注释内容,这是编程的良好习惯。
2、在php中创建一个类使用的是class这个函数来执行,格式:class 类的名称{}。如:class test4{}。
3、在类的内部写上新建变量。var $name。
4、新建一个函数。function myname($mingzi){$this-name=$mingzi;}。
5、然后通过new这个函数实例化这个对象。
6、将这个实例化的对象打印出来看看。
php中显示数组与对象的实现代码
1、
使用
print_r
(
$array/$var
)
是打印的意思,而r则取自Array的单词,那么该函数的功能就是打印数组内容,它既可以打印数组内容,也可以打印普通的变量。
print_r
($_REQUEST)
;
print_r
($_GET)
;
/*
打印使用GET方法传递的表单内容*/
print_r($_POST)
;
/*
打印使用表单POST方法传递过的数组内容*/
2、
使用
var_dump
($object/$array/$var)
var
代表变量(Variable),变量包括对象、数组以及标量变量,dump有倒出之意,加在一块,就是将变量或对象的内容全部输出出来。
var_dump($DB)
;
/*打印$DB数据库连接对象的内容*/
var_dump($fileHandle)
;
/*打印文件句柄对象的内容*/
var_dump($Smarty)
;
/*打印Smarty模板对象*/
3、
使用
var_export($object/$array/$var)
输出或返回一个变量的字符表示。此函数返回关于传递给函数的变量的结构信息,它和print_r()类似,不同的是其返回的表示是合法的PHP代码。可以通过将函数的第二个参数设置为TRUE,从而返回变量的表示。
例如:
复制代码
代码如下:
?php
$a
=
array
(
1,2,
array("a","b","c"))
;
var_export
($a)
;
echo
"br"
;
$v
=
var_export
(
$a
,
TRUE)
;
echo
$v
;
?
上例中,$v
=
var_export
(
$a
,
TRUE)
表示返回的是PHP的源代码,可以直接用PHP脚本的数组文件中。
相关说明:
以上三个函数都可以打印对象的值、系统函数值以及数组的内容;
△
echo
、print、printf可以打印变量内容,但不能显示数组及系统超级变量数组;
△
print_r
和
var_dump不仅可以打印数组、标量变量,还可以打印对象的内容;
△
var_dump语句不仅能打印变量、数组内容,还可以显示布尔变量和资源(Resource)的内容;
△
var_export
函数返回关于传递给该函数的变量的结构信息,和
var_dump()函数类似,不同的是其返回的内容是合法的PHP代码。