2024-09-19 05:43:20 | 我爱编程网
php高级教程
导语:php是it行业语言,也是一门较热的网络技术,下面就由我为大家介绍一下php高级教程,欢迎大家阅读!
一、PHP- 多维数组:
$cars = array(
array("huawei","12","11"),
array("meizu","23","12"),
array("iphone","12","4")
);
$title = array("手机总共有:","个,已经卖出去了","个!");
for($i=0;$i{ for($j=0;$j { echo $cars[$i][$j]; echo $title[$j]; } echo " ";}?>
输出:
huawei手机总共有:12个,已经卖出去了11个!
meizu手机总共有:23个,已经卖出去了12个!
iphone手机总共有:12个,已经卖出去了4个!
二、PHP 日期和时间
date() 函数的格式参数是必需的,它们规定如何格式化日期或时间。
下面列出了一些常用于日期的字符:
·d - 表示月里的某天(01-31) D-表示当前这天的英文星期简写
·m - 表示月(01-12) M-表示当前月的英文缩写
·Y - 表示年(四位数) y-表示年(后两位数)
·1 - 表示周里的某天 L-返回0
其他字符,比如 "/","." 或 "-" 也可被 插入字符中,以增加其他格式。
echo"今天是 " . date("YYYY/m/d") ." "; //2017201720172017/06/26 由此可见不能用js中yyyy-mm-dd的形式
echo"今天是 " . date("Y.m.d") . " "; //2017.06.26
echo"今天是 " . date("Y-M-D") . " "; //17-Jun-Mon
echo"今天是 " . date("l") . " "; //Monday 星期全称
echo"今天是 " . date("L") . " "; //0
?>
获得简单的时间
下面是常用于时间的字符:
date_default_timezone_set("Asia/Shanghai"); //设置时区
echo date_default_timezone_get(oid);//获取当前时区
·h - 带有首位零的 12 小时小时格式 H-24小时格式
·i - 带有首位零的分钟 I-0
·s - 带有首位零的秒(00 -59) S-返回th我也不知道是什么鬼
·a - 小写的午前和午后(am 或 pm) A-返回大写格式:AM或PM
echo"现在是 " . date("h:i:sa") . " "; //现在是 02:15:44pm
echo"现在是 " . date("H:I:SA") . " "; //现在是 14:0:thPM
通过 PHP mktime() 创建日期
date() 函数中可选的时间戳参数规定时间戳。如果您未规定时间戳,将使用当前日期和时间
语法
mktime(hour,minute,second,month,day,year)
$d=mktime(9,12, 31, 6, 10, 215) ;
echo"创建日期是 " . date("Y-m-d h:i:sa", $d) ." "; //在date方法里面传参则取的是参数中的时间,如果不传的话则取的是当前时间
通过 PHP strtotime() 用字符串来创建日期
PHP strtotime() 函数用于把人类可读的字符串转换为Unix 时间。
$d=strtotime("10:38pm April 15 2015");
echo "创建日期是 " . date("Y-m-d h:i:sa", $d);
如果输入了它不能识别的字符串则保存为 1970-01-01 12:00:00am
计算两个时间段内的时间所有的周六
$startdate = strtotime("Saturday");
$enddate = strtotime("+6 weeks",$startdate);
while ($startdate < $enddate) {
echo date("M d", $startdate)," ";
$startdate = strtotime("+1 week", $startdate); //在$startdate基础上加一个礼拜,你还可以加1天,1个月,1年
}
?>
计算距离某一天还有多长时间
$d1=strtotime("2017-7-30");
$d2=ceil(($d1-time())/60/60/24);
echo "距离十二月三十一日还有:" . $d2 ." 天。";
?>
三、PHP Cookies
cookie 常用于识别用户。cookie 是服务器留在用户计算机中的小文件。每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie。通过 PHP,您能够创建并取回 cookie 的值。
创建cookie
setcookie() 函数用于设置 cookie。
注释:setcookie() 函数必须位于
标签之前。
语法
setcookie(name, value, expire, path, domain);
在下面的例子中,我们将创建名为 "user" 的 cookie,把为它赋值 "Alex Porter"。我们也规定了此 cookie 在一小时后过期:
setcookie("user", "Alex Porter", time()+3600);
?>
注释:在发送 cookie 时,cookie 的值会自动进行 URL 编码,在取回时进行自动解码(为防止 URL 编码,请使用setrawcookie() 取而代之)。
取回 Cookie 的值
PHP 的 $_COOKIE 变量用于取回cookie 的值。
// Print a cookie
echo $_COOKIE["user"];
// A way to view all cookies
print_r($_COOKIE);
?>
删除 cookie当删除 cookie 时,您应当使过期日期变更为过去的时间点。
// set the expiration date to one hour ago
setcookie("user", "", time()-3600);
?>
如果浏览器不支持 cookie 该怎么办?
如果您的应用程序涉及不支持cookie 的浏览器,就不得不采取其他方法在应用程序中从一张页面向另一张页面传递信息。一种方式是从表单传递数据(有关表单和用户输入的内容,稍早前我们已经在本教程中介绍过了)。
下面的表单在用户单击提交按钮时向"welcome.php" 提交了用户输入:
Name:
Age:
取回"welcome.php" 中的值,就像这样:
Welcome .
You are years old.
四、PHP Sessions
PHP Session 变量
当您运行一个应用程序时,您会打开它,做些更改,然后关闭它。这很像一次会话。计算机清楚你是谁。它知道你何时启动应用程序,并在何时终止。但是在因特网上,存在一个问题:服务器不知道你是谁以及你做什么,这是由于 HTTP 地址不能维持状态。
通过在服务器上存储用户信息以便随后使用,PHP session 解决了这个问题(比如用户名称、购买商品等)。不过,会话信息是临时的,在用户离开网站后将被删除。如果您需要永久储存信息,可以把数据存储在数据库中。
Session 的工作机制是:为每个访问者创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在cookie 中,亦或通过 URL 进行传导。
开始 PHP Session
在您把用户信息存储到 PHPsession 中之前,首先必须启动会话。
注释:session_start() 函数必须位于
标签之前:
上面的代码会向服务器注册用户的会话,以便您可以开始保存用户信息,同时会为用户会话分配一个 UID。
存储 Session 变量
存储和取回session 变量的正确方法是使用 PHP$_SESSION 变量:
session_start();
// store session data
$_SESSION['views']=1;
?>
//retrieve session data
echo "Pageviews=". $_SESSION['views'];
?>
输出:
Pageviews=1
在下面的例子中,我们创建了一个简单的 page-view 计数器。isset() 函数检测是否已设置 "views" 变量。如果已设置 "views" 变量,我们累加计数器。如果 "views" 不存在,则我们创建 "views" 变量,并把它设置为 1:
session_start();
if(isset($_SESSION['views']))
$_SESSION['views']=$_SESSION['views']+1;
else
$_SESSION['views']=1;
echo "Views=". $_SESSION['views'];
?>
终结 Session
如果您希望删除某些session 数据,可以使用 unset() 或 session_destroy() 函数。
unset() 函数用于释放指定的 session 变量:
unset($_SESSION['views']);
?>
您也可以通过session_destroy() 函数彻底终结 session:
session_destroy();
?>
注释:session_destroy() 将重置 session,您将失去所有已存储的session 数据。
五、PHP 错误处理
错误处理方法:
·简单的 "die()" 语句
·自定义错误和错误触发器
·错误报告
为了避免用户获得类似上面的错误消息,我们在访问文件之前检测该文件是否存在:
if(!file_exists("welcome.txt"))
{
die("File not found");
}
else
{
$file=fopen("welcome.txt","r");
}
?>
假如文件不存在,您会得到类似这样的错误消息:
File not found
比起之前的代码,上面的代码更有效,这是由于它采用了一个简单的错误处理机制在错误之后终止了脚本。
不过,简单地终止脚本并不总是恰当的方式。让我们研究一下用于处理错误的备选的 PHP 函数。
创建自定义错误处理器
创建一个自定义的错误处理器,可以在PHP 中发生错误时调用该函数。
该函数必须有能力处理至少两个参数(error level 和 error message),但是可以接受最多五个参数(可选的:file, line-number 以及error context):
语法
error_function(error_level,error_message,
error_file,error_line,error_context)
参数描述
error_level:必需。为用户定义的错误规定错误报告级别。必须是一个值数。参见下面的表格:错误报告级别。
error_message:必需。为用户定义的错误规定错误消息。
error_file:可选。规定错误在其中发生的文件名。
error_line:可选。规定错误发生的行号。
error_context:可选。规定一个数组,包含了当错误发生时在用的每个变量以及它们的值。
创建错误处理函数
function customError($errno, $errstr)
{
echo "Error: [$errno] $errstr
";
echo "Ending Script";
die();
}
现在,我们已经创建了一个错误处理函数,我们需要确定在何时触发该函数。
Set ErrorHandler
PHP 的默认错误处理程序是内建的错误处理程序。我们打算把上面的函数改造为脚本运行期间的默认错误处理程序。
可以修改错误处理程序,使其仅应用到某些错误,这样脚本就可以不同的方式来处理不同的错误。不过,在本例中,我们打算针对所有错误来使用我们的自定义错误处理程序:
set_error_handler("customError");
由于我们希望我们的自定义函数来处理所有错误,set_error_handler() 仅需要一个参数,可以添加第二个参数来规定错误级别。
//定义错误处理函数
function customError($errno, $errstr)
{
echo "rror: [$errno] $errstr";
}
//设置错误处理函数
set_error_handler("customError");
//触发错误
echo($test);
?>
可能的错误类型:
·E_USER_ERROR - 致命的用户生成的run-time 错误。错误无法恢复。脚本执行被中断。
·E_USER_WARNING - 非致命的用户生成的run-time 警告。脚本执行不被中断。
·E_USER_NOTICE - 默认。用户生成的`run-time 通知。脚本发现了可能的错误,也有可能在脚本运行正常时发生。
例子
在本例中,如果"test" 变量大于 "1",则发生E_USER_WARNING 错误。如果发生了 E_USER_WARNING,我们将使用我们的自定义错误处理程序并结束脚本:
//error handler function
function customError($errno, $errstr)
{
echo "Error: [$errno] $errstr
";
echo "Ending Script";
die();
}
//set error handler
set_error_handler("customError",E_USER_WARNING);
//trigger error
$test=2;
if ($test>1)
{
trigger_error("Value must be 1 or below",E_USER_WARNING);
}
?>
错误记录
通过 E-Mail 发送错误消息
function customError($errno, $errstr)
{
echo "Error: [$errno] $errstr ";
echo "Webmaster has been notified";
error_log("Error: [$errno] $errstr",1,
"526369948@qq.com","From: 526369948@qq.com");
}
六、PHP 异常处理
异常处理用于在指定的错误(异常)情况发生时改变脚本的正常流程。这种情况称为异常。
当异常被触发时,通常会发生:
·当前代码状态被保存
·代码执行被切换到预定义的异常处理器函数
·根据情况,处理器也许会从保存的代码状态重新开始执行代码,终止脚本执行,或从代码中另外的位置继续执行脚本
我们将展示不同的错误处理方法:
·异常的基本使用
·创建自定义的异常处理器
·多个异常
·重新抛出异常
·设置顶层异常处理器
Try, throw 和 catch
要避免上面例子出现的错误,我们需要创建适当的代码来处理异常。
正确的处理程序应当包括:
1.Try - 使用异常的函数应该位于"try" 代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。
2.Throw - 这里规定如何触发异常。每一个 "throw" 必须对应至少一个 "catch"
3.Catch - "catch" 代码块会捕获异常,并创建一个包含异常信息的对象
让我们触发一个异常:
//创建可抛出一个异常的函数
function checkNum($number)
{
if($number>1)
{
throw new Exception("Value must be 1 or below");
}
return true;
}
//在 "try" 代码块中触发异常
try
{
checkNum(2);//如果抛出异常则执行catch中的语句,这里就不接着往下执行了
//If the exception is thrown, this text will not be shown
echo 'If you see this, the number is 1 or below';
}
//捕获异常
catch(Exception $e)
{
echo 'Message: ' .$e->getMessage();
}
?>
上面代码将获得类似这样一个错误:
Message: Value must be 1 or below
创建一个自定义的 Exception 类
创建自定义的异常处理程序非常简单。我们简单地创建了一个专门的类,当 PHP 中发生异常时,可调用其函数。该类必须是 exception 类的一个扩展。
这个自定义的exception 类继承了 PHP 的 exception 类的所有属性,您可向其添加自定义的函数。
我们开始创建exception 类:
class customException extends Exception //extends 相当于继承关键字
{
public function errorMessage() //定义了自己的报错函数
{
//error message 在继承的类中,可以访问基类的方法
$errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
.': '.$this->getMessage().' is not a valid E-Mail address';
return $errorMsg;
}
}
$email = "someone@example...com";
try
{
//check if
if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
{
//throw exception if email is not valid
throw new customException($email);
}
}
catch (customException $e)
{
//display custom message
echo $e->errorMessage();
}
?>
这个新的类是旧的exception 类的副本,外加 errorMessage() 函数。正因为它是旧类的副本,因此它从旧类继承了属性和方法,我们可以使用 exception 类的方法,比如 getLine() 、getFile() 以及 getMessage()。
多个异常
可以为一段脚本使用多个异常,来检测多种情况。
可以使用多个if..else 代码块,或一个 switch 代码块,或者嵌套多个异常。这些异常能够使用不同的 exception 类,并返回不同的错误消息:
一 引论
在任何计算机设备中 文件是都是必须的对象 而在web编程中 文件的操作一直是web程序员的头疼的地方 而 文件的操作在cms系统中这是必须的 非常有用的 我们经常遇到生成文件目录 文件(夹)编辑等操作 现在我把php中的这些函数做一详细总结并实例示范如何使用 关于对应的函数详细介绍 请查阅php手册 此处只总结重点 和需要注意的地方 (这在php手册是没有的 )( lian )
二 目录操作
首先介绍的是一个从目录读取的函数 opendir() readdir() closedir() 使用的时候是先打开文件句柄 而后迭代列出:
<?php $base_dir = filelist/ ; $fso = opendir($base_dir); echo $base_dir <hr/> ; while($flist=readdir($fso)){ echo $flist <br/> ; } closedir($fso) ?>
这是讲返回文件目录下面的文件已经目录的程序( 文件将返回false)
有时候需要知道目录的信息 可以使用dirname($path)和basename($path) 分别返回路径的目录部分和文件名名称部分 可用disk_free_space($path)返回看空间空余空间
创建命令:
mkdir($path )
是权限码 在非window下可用umask()函数设置
rmdir($path)
将删除路径在$path的文件
dir directory 类也是操作文件目录的重要类 有 个方法 read rewind close 这是一个仿面向对象的类 它先使用的是打开文件句柄 然后用指针的方式读取的 这里看php手册:
<?php$d = dir( /etc/php );echo Handle: $d >handle /n ;echo Path: $d >path /n ;while (false !== ($entry = $d >read())) { echo $entry /n ;}$d >close();?>
输出:
Handle: Resource id # Path: /etc/php apachecgicli
文件的属性也非常重要 文件属性包括创建时间 最后修改时间 所有者 文件组 类型 大小等
下面我们重点谈文件操作
三 文件操作
A 读文件
首先是一个文件看能不能读取(权限问题) 或者存在不 我们可以用is_readable函数获取信息
<?php$file = dirlist php ;if (is_readable($file) == false) { die( 文件不存在或者无法读取 );} else { echo 存在 ;}?>
判断文件存在的函数还有file_exists(下面演示) 但是这个显然无is_readable全面 当一个文件存在的话可以用
<?php$file = filelist php ;if (file_exists($file) == false) { die( 文件不存在 );}$data = file_get_contents($file);echo entities($data);?>
但是file_get_contents函数在较低版本上不支持 可以先创建文件的一个句柄 然后用指针读取全部:
$fso = fopen($cacheFile r ); $data = fread($fso filesize($cacheFile)); fclose($fso);
还有一种方式 可以读取二进制的文件:
$data = implode( file($file));
B 写文件
和读取文件的方式一样 先看看是不是能写:
<?php$file = dirlist php ;if (is_writable($file) == false) { die( 我是鸡毛 我不能 );}?>
能写了的话可以使用file_put_contents函数写入:
<?php $file = dirlist php ; if (is_writable($file) == false) { die( 我是鸡毛 我不能 ); } $data = 我是可鄙 我想要 ; file_put_contents ($file $data); ?>
file_put_contents函数在php 中新引进的函数(不知道存在的话用function_exists函数先判断一下)低版本的php无法使用 可以使用如下方式:
$f = fopen($file w ); fwrite($f $data); fclose($f);
替换之
写文件的时候有时候需要锁定 然后写:
function cache_page($pageurl $pagedata){ if(!$fso=fopen($pageurl w )){ $this >warns( 无法打开缓存文件 );//trigger_error return false; } if(!flock($fso LOCK_EX)){//LOCK_NB 排它型锁定 $this >warns( 无法锁定缓存文件 );//trigger_error return false; } if(!fwrite($fso $pagedata)){//写入字节流 serialize写入其他格式 $this >warns( 无法写入缓存文件 );//trigger_error return false; } flock($fso LOCK_UN);//释放锁定 fclose($fso); return true; }
C 复制 删除文件
php删除文件非常easy 用unlink函数简单操作:
<?php $file = dirlist php ; $result = @unlink ($file); if ($result == false) { echo 蚊子赶走了 ; } else { echo 无法赶走 ; } ?>
即可
复制文件也很容易:
<?php $file = yang txt ; $newfile = ji txt ; # 这个文件父文件夹必须能写 if (file_exists($file) == false) { die ( 小样没上线 无法复制 ); } $result = copy($file $newfile); if ($result == false) { echo 复制记忆ok ; } ?>
可以使用rename()函数重命名一个文件夹 其他操作都是这几个函数组合一下就能实现的
D 获取文件属性 我爱编程网
我说几个常见的函数:
获取最近修改时间:
<?php $file = test txt ; echo date( r filemtime($file)); ?>
返回的说unix的时间戳 这在缓存技术常用
相关的还有获取上次被访问的时间fileatime() filectime()当文件的权限 所有者 所有组或其它 inode 中的元数据被更新时间 fileowner()函数返回文件所有者
$owner = posix_getpwuid(fileowner($file));
(非window系统) ileperms()获取文件的权限
<?php$file = dirlist php ;$perms = substr(sprintf( %o fileperms($file)) );echo $perms;?>
filesize()返回文件大小的字节数:
<?php
// 输出类似 somefile txt: bytes
$filename = somefile txt ; echo $filename : filesize($filename) bytes ;
?>
获取文件的全部信息有个返回数组的函数stat()函数:
<?php $file = dirlist php ; $perms = stat($file); var_dump($perms); ?>
那个键对应什么可以查阅详细资料 此处不再展开
四 结束语
lishixinzhi/Article/program/PHP/201311/21262我爱编程网(https://www.52biancheng.com)小编还为大家带来Php设计模式如何实现(php设计模式如何实现数据分析)的相关内容。
PHP模式、映射数据映射模式使您能更好的组织你的应用程序与数据库进行交互。
数据映射模式将对象的属性与存储它们的表字段间的结合密度降低。数据映射模式的本质就是一个类,它映射或是翻译类的属性或是方法到数据库的相应字段,反之亦然。
数据映射的作用(工作)就在于能对双方所呈现出的信息的理解,并能对信息的存取进行控制,如根据存储在数据表中的信息重建新的域对象,或是用域对象的信息来更新或删除数据表中的相关数据。
对于面向对象代码与数据库表和字段间的映射关系的存储有多种实现方式。其中一种可能的方法就通过手工编码将这种映射关系存储在数据映射类中。
另一种可选的方法是用PHP的数组并将其编码为类本身。这个类也能外源获取数据,如INI或是XML文件。
PHP的单态设计模式对于java转过来程序员说是单态设计模式,在PHP上通常说是单例模式,说法不一样,手册上也有介绍:
单例模式(Singleton)用于为一个类生成一个唯一的对象。最常用的地方是数据库连接。使用单例模式生成一个对象后,该对象可以被其它众多对象所使用。
?php
classExample
{
//保存类实例在此属性中
privatestatic$instance;
//构造方法声明为private,防止直接创建对象
privatefunction__construct()
{
echo'Iamconstructed';
}
//singleton方法
publicstaticfunctionsingleton()
{
if(!isset(self::$instance)){
$c=__CLASS__;
self::$instance=new$c;
}
returnself::$instance;
}
//Example类中的普通方法
publicfunctionbark()
{
echo'Woof!';
}
//阻止用户复制对象实例
publicfunction__clone()
{
trigger_error('Cloneisnotallowed.',E_USER_ERROR);
}
}
?
这样我们可以得到一个独一无二的Example类的对象。
?php
//这个写法会出错,因为构造方法被声明为private
$test=newExample;
//下面将得到Example类的单例对象
$test=Example::singleton();
$test-bark();
//复制对象将导致一个E_USER_ERROR.
$test_clone=clone$test;
?
php中有哪些设计模式,举例说明应用场景PHP一般有五种常见的设计模式
工厂模式
它具有创建对象的某些方法。可以使用工厂类创建对象,而不直接使用new。
例如:
?php
interfaceIUser
{
functiongetName();
}
classUserimplementsIUser
{
publicfunction__construct($id){}
publicfunctiongetName()
{
return"Jack";
}
}
classUserFactory
{
publicstaticfunctionCreate($id)
{
returnnewUser($id);
}
}
$uo=UserFactory::Create(1);
echo($uo-getName()."\n");
?
另外四种是:观察者模式,单元素模式,命令链模式,策略模式。例子可以百度一搜。
php设计模式介绍之迭代器模式《PHP设计模式介绍》第八章迭代器模式
类中的面向对象编程封装应用逻辑类就是实例化的对象每个单独的对象都有一个特定的身份和状态单独的对象是一种组织代码的有用方法但通常你会处理一组对象或者集合
属性来自SQL查询的一组数据就是一个集合就像本书前面章节介绍的Monopoly游戏示例的对象列表
集合不一定是均一的图形用户界面框架中的Window对象可以收集任意数量的控制对象-MenuSlider和Button并且集合的实现可以有多种方式PHP数字是一个集合但也是一个散列表一个链接列表一个堆栈以及队列
问题
如何操纵任意的对象集合?
解决方案
使用迭代器模式来提供对集合内容的统一存取
你可能没有意识到这一点但你每天都在使用迭代器模式-它潜藏在PHP的数组类型和各种数组操作函数中(其实给你一些固有类的数组的组合和一群用这些固有类工作的可变函数你将不得不使用这些数组来处理对象集合这是在PHP中的本地数组迭代
$test?=?array(one?o?three);$output?=?;reset($test);do?{$output?=?current($test);}?while?(next($test));echo?$output;?//?produces?oneothree
reset()函数将迭代重新转到数组的开始current()返回当前元素的值next()则前进至数组中的下一个元素并返回新的current()值当你超出数组的最后一个元素时next()返回false使用这些迭代方法PHP数组的内部实现就与你不相关了迭代器结合了封装和多态的面向对象程序设计原理使用迭代器你可以对集合中的对象进行操作而无需专门了解集合如何显现或者集合包含什么(对象的种类)迭代器提供了不同固定迭代实现的统一接口它完全包含了如何操纵特定集合的详细信息包括显示哪些项(过滤)及其显示顺序(排序)
让我们创建一个简单的对象在数组中对它进行操作(尽管该示例在PHP环境下但迭代器并不特定于PHP虽然添加了较多的引用操作符本章节中的大多数示例在PHP下也能够运行)对象Lendable表示诸如电影相册等媒体它作为Web站点的一部分或服务允许用户浏览或将他们的媒体集合分享给其他用户(对???????于该示例请无需考虑其他方面)让我们开始下面对Lendable基础设计的测试
//?PHPclass?LendableTestCase?extends?UnitTestCase?{function?TestCheckout()?{$item?=?new?Lendable;$thisassertFalse($itemborrower);$itemcheckout(John);$thisassertEqual(borrowed?$itemstatus);$thisassertEqual(John?$itemborrower);}function?TestCheckin()?{$item?=?new?Lendable;$itemcheckout(John);$itemcheckin();$thisassertEqual(library?$itemstatus);$thisassertFalse($itemborrower);}}
要实现这一最初测试的需求我们来创建一个带有若干公共属性和一些方法的类来触发这些属性的值
class?Lendable?{public?$status?=?library;public?$borrower?=?;public?function?checkout($borrower)?{$thisstatus?=?borrowed;$thisborrower?=?$borrower;}public?function?checkin()?{$thisstatus?=?library;$thisborrower?=?;}}
Lendable是一个好的普通的开端让我们将它扩展到诸如DVD或CD的磁道项媒体扩展了Lendable并且磁道详细记录了特定媒体的详细信息包括项目的名称发布的年份以及项本身的类型
class?Media?extends?Lendable?{public?$name;public?$type;public?$year;public?function?__construct($name?$year?$type=dvd)?{$thisname?=?$name;$thistype?=?$type;$thisyear?=?(int)$year;}}
要使事情更加简单媒体有三个公共的实例变量Media::nameMedia::year和Media::type构造函数采用了两个参数将第一个存储在$name中第二个存储在$year中构造函数还允许可选的第三个参数来指定类型(缺省为dvd)
给定单独的对象来操作你现在可以创建一个容器来包含他们Library类似于常用的库Library应该能够添加删除和计算集合中的项甚至Library还应该允许访问集合(本章中的样本代码部分可看到示例)中的单一的项(对象)
我们开始构建Library的测试用例
class?LibraryTestCase?extends?UnitTestCase?{function?TestCount()?{$lib?=?new?Library;$thisassertEqual(?$libcount());}}
它是满足这一测试的简单类
class?Library?{function?count()?{return?;}}
继续将一些有趣的功能添加到测试中
class?LibraryTestCase?extends?UnitTestCase?{function?TestCount()?{?/*??*/?}function?TestAdd()?{$lib?=?new?Library;$libadd(one);$thisassertEqual(?$libcount());}}
实现add()的简单方法是建立在PHP灵活数组函数的基础上你可以将项添加到实例变量并使用count()来返回集合众项的数量
class?Library?{protected?$collection?=?array();function?count()?{return?count($thiscollection);}function?add($item)?{$thiscollection[]?=?$item;}}
lishixinzhi/Article/program/net/201311/13092
怎么理解php中的设计模式
1、单例模式:PHP中的对象生存期间是从该脚本开始一直到该脚本结束为止,因此PHP的单例模式只是在一个页面中(这里可能包含很多其他页面,不是狭义的单页面)多次用到该对象时才会起作用,多次用到时不去重复的new对象(多个人做一个项目时,难免会碰到一次请求中多次实例一个对象的情况),将不会耗费不必要的资源(数据控连接操做效果很明显),还有一点就是可以保证整个脚本中都是同一个对象,这种模式是怎么实现的呢,他的实现有几个要注意的点:
a.首先就是要将__construct()方法定义为私有方法,这样就不能通过new来得到一个新的实例了,单例模式不能在外部进行实例化,这能字自身内部进行实例化;
2025-02-01 20:24:39
2025-02-12 03:21:37
2025-02-10 15:19:48
2025-01-28 17:58:32
2024-11-22 05:08:01
2024-09-10 08:50:00