⑴ 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有几种设计模式
5种啊工厂模式,单元素模式,观察者模式,命令链模式,策略模式,希望能帮到你,我还要在后盾网上课学习呢,有不会的可以问我。(´ω`*)
⑶ 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.工厂模式
工厂模式是一种类,它具有为您创建对象的某些方法。您可以使用工厂类创建对象,而不直接使用 new。这样,如果您想要更改所创建的对象类型,只需更改该工厂即可。使用该工厂的所有代码会自动更改。
2.单元素模式
某些应用程序资源是独占的,因为有且只有一个此类型的资源。例如,通过数据库句柄到数据库的连接是独占的。您希望在应用程序中共享数据库句柄,因为在保持连接打开或关闭时,它是一种开销,在获取单个页面的过程中更是如此。
3.观察者模式
观察者模式为您提供了避免组件之间紧密耦合的另一种方法。该模式非常简单:一个对象通过添加一个方法(该方法允许另一个对象,即观察者 注册自己)使本身变得可观察。当可观察的对象更改时,它会将消息发送到已注册的观察者。这些观察者使用该信息执行的操作与可观察的对象无关。结果是对象可 以相互对话,而不必了解原因。
4.命令链模式
命令链 模式以松散耦合主题为基础,发送消息、命令和请求,或通过一组处理程序发送任意内容。每个处理程序都会自行判断自己能否处理请求。如果可以,该请求被处理,进程停止。您可以为系统添加或移除处理程序,而不影响其他处理程序。
5.策略模式
我们讲述的最后一个设计模式是策略 模式。在此模式中,算法是从复杂类提取的,因而可以方便地替换。例如,如果要更改搜索引擎中排列页的方法,则策略模式是一个不错的选择。思考一下搜索引擎 的几个部分 —— 一部分遍历页面,一部分对每页排列,另一部分基于排列的结果排序。在复杂的示例中,这些部分都在同一个类中。通过使用策略模式,您可将排列部分放入另一个 类中,以便更改页排列的方式,而不影响搜索引擎的其余代码。
⑸ php设计模式工厂模式有什么作用
工厂模式分为三种:简单工厂、工厂方法、抽象工厂 ,三种工厂的区别是,抽象工厂由多条产品线,而工厂方法只有一条产品线,是抽象工厂的简化。而工厂方法和简单工厂相对,大家初看起来好像工厂方法增加了许多代码但是实现的功能和简单工厂一样。但本质是,简单工厂并未严格遵循设计模式的开闭原则,当需要增加新产品时也需要修改工厂代码。但是工厂方法则严格遵守开闭原则,模式只负责抽象工厂接口,具体工厂交给客户去扩展。在分工时,核心工程师负责抽象工厂和抽象产品的定义,业务工程师负责具体工厂和具体产品的实现。只要抽象层设计的好,框架就是非常稳定的。
⑹ php设计模式中工厂模式和单例模式的区别
工厂模式使用时,返回的对象之间没有关系。单例模式返回始终是同一个对象。可以在代码的定义明显的区分出来,单例模式的构造函数 一般是私有的,不允许实例化,通过内部静态方法实例化自己,同类型的对象始终返回同一个。
⑺ mvc设计模式是php设计模式吗
是,我现在用的网站系统就是MVC设计模式,也是PHP语言做的,MVC对于PHP和JAVA都是适用的,而且结构层次简单明了
⑻ PHP开发幼儿园管理系统的数据库模型设计
展开全部
(一)系统数据库类型
数据库是整个农用地分等信息系统的基础,是系统开发设计要考虑的重中之重。在数据形式上,系统数据库包括两大块:一是空间数据库,二是属性数据库。目前的空间数据技术已从以MapInfo为代表的混合型数据库(空间数据库+关系型数据库)发展到以ArcInfo的Coverage为代表的拓展型数据库。鉴于农用地分等属性数据量庞大,为减少数据冗余,提高数据检索的速度,本研究采用空间数据和属性数据分开管理的模式,依据关键字段进行绑定,进行科学索引,从而实现空间数据和属性动态链接和高效整合。
空间数据库
江苏省农用地分等信息系统空间数据库内容包括以下方面:
(1)土地利用现状图层:全省13个省辖市以1996年土地利用现状图为基础,经变更调绘形成以2000年为基准年的土地利用现状图,以现行的土地分类标准按八大类分类进行信息提取并分层存储,系统分别存储为耕地、林地、水域、未利用地、建设用地等图层。
(2)全省土壤类型图层:以土属为分类单位,比例尺为1:20万。
(3)1996年和2000年全省行政区划图层:在行政区划中精确到乡镇级别,分别提取存储了市名图层、县(区)名图层、乡(镇)名图层、全省行政界线图层、市级行政界线图层、县(区)级行政界线图层、乡(镇)级行政界线图层。
(4)评价单元图层:通过GIS空间叠加功能,利用土地利用现状图、行政区划图和土壤类型图叠加产生的评价单元图层,建立分等评价单元数据库。
2.属性数据库
江苏省农用地分等信息系统属性数据库内容包括以下方面:
(1)土壤属性数据:以全国第二次土壤普查为基础,结合全省土壤监测样点数据,建立土壤质量状况数据库,最小单位为土种,包括pH值、有机质含量、表层土壤质地、耕层厚度、障碍层深度、水土侵蚀程度、盐渍化程度数据。
⑼ 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" );
?>
单元素模式
某些应用程序资源是独占的,因为有且只有一个此类型的资源。例如,通过数据库句柄到数据库的连接是独占的。您希望在应用程序中共享数据库句柄,因为在保持连接打开或关闭时,它是一种开销,在获取单个页面的过程中更是如此。
单元素模式可以满足此要求。如果应用程序每次包含且仅包含一个对象,那么这个对象就是一个单元素(Singleton)。
例如:
<?php
require_once("DB.php");
class DatabaseConnection
{
public static function get()
{
static $db = null;
if ( $db == null )
$db = new DatabaseConnection();
return $db;
}
private $_handle = null;
private function __construct()
{
$dsn = 'mysql://root:password@localhost/photos';
$this->_handle =& DB::Connect( $dsn, array() );
}
public function handle()
{
return $this->_handle;
}
}
print( "Handle = ".DatabaseConnection::get()->handle()."\n" );
print( "Handle = ".DatabaseConnection::get()->handle()."\n" );
?>
观察者模式
观察者模式为您提供了避免组件之间紧密耦合的另一种方法。该模式非常简单:一个对象通过添加一个方法(该方法允许另一个对象,即观察者 注册自己)使本身变得可观察。当可观察的对象更改时,它会将消息发送到已注册的观察者。这些观察者使用该信息执行的操作与可观察的对象无关。结果是对象可以相互对话,而不必了解原因。
例如:
<?php
interface IObserver
{
function onChanged( $sender, $args );
}
interface IObservable
{
function addObserver( $observer );
}
class UserList implements IObservable
{
private $_observers = array();
public function addCustomer( $name )
{
foreach( $this->_observers as $obs )
$obs->onChanged( $this, $name );
}
public function addObserver( $observer )
{
$this->_observers []= $observer;
}
}
class UserListLogger implements IObserver
{
public function onChanged( $sender, $args )
{
echo( "'$args' added to user list\n" );
}
}
$ul = new UserList();
$ul->addObserver( new UserListLogger() );
$ul->addCustomer( "Jack" );
?>
命令链模式
命令链 模式以松散耦合主题为基础,发送消息、命令和请求,或通过一组处理程序发送任意内容。每个处理程序都会自行判断自己能否处理请求。如果可以,该请求被处理,进程停止。您可以为系统添加或移除处理程序,而不影响其他处理程序。
例如:
<?php
interface ICommand
{
function onCommand( $name, $args );
}
class CommandChain
{
private $_commands = array();
public function addCommand( $cmd )
{
$this->_commands []= $cmd;
}
public function runCommand( $name, $args )
{
foreach( $this->_commands as $cmd )
{
if ( $cmd->onCommand( $name, $args ) )
return;
}
}
}
class UserCommand implements ICommand
{
public function onCommand( $name, $args )
{
if ( $name != 'addUser' ) return false;
echo( "UserCommand handling 'addUser'\n" );
return true;
}
}
class MailCommand implements ICommand
{
public function onCommand( $name, $args )
{
if ( $name != 'mail' ) return false;
echo( "MailCommand handling 'mail'\n" );
return true;
}
}
$cc = new CommandChain();
$cc->addCommand( new UserCommand() );
$cc->addCommand( new MailCommand() );
$cc->runCommand( 'addUser', null );
$cc->runCommand( 'mail', null );
?>
策略模式
我们讲述的最后一个设计模式是策略 模式。在此模式中,算法是从复杂类提取的,因而可以方便地替换。例如,如果要更改搜索引擎中排列页的方法,则策略模式是一个不错的选择。思考一下搜索引擎的几个部分 —— 一部分遍历页面,一部分对每页排列,另一部分基于排列的结果排序。在复杂的示例中,这些部分都在同一个类中。通过使用策略模式,您可将排列部分放入另一个类中,以便更改页排列的方式,而不影响搜索引擎的其余代码。
例如:
<?php
interface IStrategy
{
function filter( $record );
}
class FindAfterStrategy implements IStrategy
{
private $_name;
public function __construct( $name )
{
$this->_name = $name;
}
public function filter( $record )
{
return strcmp( $this->_name, $record ) <= 0;
}
}
class RandomStrategy implements IStrategy
{
public function filter( $record )
{
return rand( 0, 1 ) >= 0.5;
}
}
class UserList
{
private $_list = array();
public function __construct( $names )
{
if ( $names != null )
{
foreach( $names as $name )
{
$this->_list []= $name;
}
}
}
public function add( $name )
{
$this->_list []= $name;
}
public function find( $filter )
{
$recs = array();
foreach( $this->_list as $user )
{
if ( $filter->filter( $user ) )
$recs []= $user;
}
return $recs;
}
}
$ul = new UserList( array( "Andy", "Jack", "Lori", "Megan" ) );
$f1 = $ul->find( new FindAfterStrategy( "J" ) );
print_r( $f1 );
$f2 = $ul->find( new RandomStrategy() );
print_r( $f2 );
?>
⑽ 了解php设计模式么
php最常见的设计模式是单例,工厂。相较来说单利还是很常用的。很多的工具,比如数据库操作、缓存操作或某一个功能操作都可以写成一个单例去做。代码的一个开发思想都是mvc,这是几乎所有框架都遵循的一个原则。