高质量PHP代码的50个实用技巧必备_php技巧_脚本之家

本文由码农网 –
小峰原创翻译,转发请看清文末的转发须要,应接参预大家的付费投稿布置!

肆十六个高素质PHP代码的实用手艺,希望大家赏识。

前几天大家要介绍一些有关改善和优化PHP代码的唤起和技巧。请在乎,这么些PHP手艺适用于初读书人,并非那几个已经在动用MVC框架的人。

1.毫无接收相对路线 平常拜谒到:

图片 1

require_once('../../lib/some_class.php');

1.毫无接收相对路线,要定义两个根路线

这般的代码行很分布:

require_once('../../lib/some_class.php');

这种措施有超级多毛病:

  • 它首先寻觅php包括路线中的钦命目录,然后查看当前目录。由此,会检讨超级多索引。
  • 当多少个本子被含有在另三个剧本的不等目录中时,它的大旨目录变为带有脚本的目录。
  • 另贰个标题是,当两个剧本从cron运营时,它恐怕不会将它的父目录作为专业目录。

所以采纳相对路线便成为了一个好措施:

define('ROOT' , '/var/www/project/');
require_once(ROOT . '../../lib/some_class.php');

//rest of the code

那正是贰个相对路线,并且会直接保持不改变。不过,大家得以进一层矫正。目录/var/www/project能够变,那么大家每一次都要改呢?

不,使用魔术常量如__FILE__能够让它变得可移植。请紧凑看:

//suppose your script is /var/www/project/index.php
//Then __FILE__ will always have that full path.

define('ROOT' , pathinfo(__FILE__, PATHINFO_DIRNAME));
require_once(ROOT . '../../lib/some_class.php');

//rest of the code

于是现在,纵然你将项目转移到贰个莫衷一是的目录,比如将其移动到八个在线的服务器上,那些代码无需转移就足以运作。

该情势有广大弱点: 它首先查找钦定的php满含路线,
然后寻找当前目录。由此会检查过多路线。假设该脚本被另一目录的台本包涵,
它的中央目录变成了另风姿洒脱脚本所在的目录.

2.不使用require,包括require_once或include_once

你的脚本上或然会席卷种种文件,如类库,实用程序文件和帮扶函数等,就疑似那一个:

require_once('lib/Database.php');
require_once('lib/Mail.php');

require_once('helpers/utitlity_functions.php');

这一定粗糙。代码需求越来越灵敏。写好救助函数能够更易于地包蕴东西。譬如:

function load_class($class_name)
{
    //path to the class file
    $path = ROOT . '/lib/' . $class_name . '.php');
    require_once( $path ); 
}

load_class('Database');
load_class('Mail');

观望有别于了呢?很刚烈。不须求任何更加多的分解。

你还是能进一层修正:

function load_class($class_name)
{
    //path to the class file
    $path = ROOT . '/lib/' . $class_name . '.php');

    if(file_exists($path))
    {
        require_once( $path ); 
    }
}

如此做能够成功相当多事情:

  • 为同叁个类公事寻觅两个目录。
  • 自在校订包涵类文件的目录,而不破坏别的地点的代码。
  • 利用相仿的函数用于加载包括扶持函数、HTML内容等的文书。

另一难题, 当定时职务运营该脚本,
它的上司目录恐怕就不是办事目录了。因而最棒选项是利用相对路线:

3.在应用程序中敬重调节和测量试验情状

在支付进度中,我们echo数据库查询,转储创建难题的变量,然后假诺难题被消除,我们批注它们或删除它们。但让任何留在原地可提供长效帮扶。

在支付Computer上,你可以这么做:

define('ENVIRONMENT' , 'development');

if(! $db->query( $query )
{
    if(ENVIRONMENT == 'development')
    {
        echo "$query failed";
    }
    else
    {
        echo "Database error. Please contact administrator";
    }    
}

与此同期在服务器上,你能够那样做:

define('ENVIRONMENT' , 'production');

if(! $db->query( $query )
{
    if(ENVIRONMENT == 'development')
    {
        echo "$query failed";
    }
    else
    {
        echo "Database error. Please contact administrator";
    }    
}
view sourceprint? define('ROOT' , '/var/www/project/'); require_once(ROOT . '../../lib/some_class.php'); //rest of the code

4.经过会话传播景况新闻

意况消息是那个履行任务后变卦的音信。

<?php
if($wrong_username || $wrong_password)
{
    $msg = 'Invalid username or password';
}
?>
<html>
<body>

<?php echo $msg; ?>

<form>
...
</form>
</body>
</html>

如此那般的代码很广阔。使用变量来展示状态音信有一定的局限性。因为它们不可能透过重定向发送(除非你将它们作为GET变量传播给下七个剧本,但那十三分鲁钝)。况兼在大型脚本中或许会有多个消息等。

最佳的形式是选拔会话来传播(纵然是在同黄金时代页面上)。想要那样做的话在种种页面上必须得有一个session_start。

function set_flash($msg)
{
    $_SESSION['message'] = $msg;
}

function get_flash()
{
    $msg = $_SESSION['message'];
    unset($_SESSION['message']);
    return $msg;
}

在你的本子中:

<?php
if($wrong_username || $wrong_password)
{
    set_flash('Invalid username or password');
}
?>
<html>
<body>

Status is : <?php echo get_flash(); ?>
<form>
...
</form>
</body>
</html>

大家定义了三个相对路线, 值被写死了. 我们还足以修正它. 路线/var/www/project 也大概会变动, 那么大家每一回都要更改它吗? 不是的,
大家得以使用__FILE__常量, 如:

5.让函数变得灵活

function add_to_cart($item_id , $qty)
{
    $_SESSION['cart'][$item_id] = $qty;
}

add_to_cart( 'IPHONE3' , 2 );

当添加单一条款时,使用方面包车型大巴函数。那么当加多八个条款时,就得创设另叁个函数吗?NO。只要让函数变得灵活起来使之能够经受差别的参数就能够。请看:

function add_to_cart($item_id , $qty)
{
    if(!is_array($item_id))
    {
        $_SESSION['cart'][$item_id] = $qty;
    }

    else
    {
        foreach($item_id as $i_id => $qty)
        {
            $_SESSION['cart'][$i_id] = $qty;
        }
    }
}

add_to_cart( 'IPHONE3' , 2 );
add_to_cart( array('IPHONE3' => 2 , 'IPAD' => 5) );

好了,今后同黄金年代的函数就足以承担分歧类别的输出了。以上代码能够行使到无数地点让您的代码越来越灵敏。

//suppose your script is /var/www/project/index.php //Then __FILE__ will always have that full path. define('ROOT' , pathinfo(__FILE__, PATHINFO_DIRNAME)); require_once(ROOT . '../../lib/some_class.php'); //rest of the code

6.省略甘休的php标签,就算它是本子中的最终大器晚成行

自个儿不知道为何繁多博客文章在座谈php小技能时要简明这么些手艺。

<?php

echo "Hello";

//Now dont close this tag

这能够扶植您省略大量标题。举二个例证:

类文件super_class.php

<?php
class super_class
{
    function super_function()
    {
        //super code
    }
}
?>
//super extra character after the closing tag

现在看index.php

require_once('super_class.php');

//echo an image or pdf , or set the cookies or session data

您会获取发送错误的Header。为何吧?因为“超级多余字符”,全数标题都去管理那个去了。于是你得开头调节和测量试验。你恐怕须要浪费广大时日来寻觅一流额外的空间。

为此要养成省略甘休标签的习贯:

<?php
class super_class
{
    function super_function()
    {
        //super code
    }
}

//No closing tag

与此相类似更加好。

现在, 无论你移到哪些目录, 如移到叁个外网的服务器上,
代码无须改换便可科学启动.

7.在多少个地方搜罗全体出口,然后二次性输出给浏览器

那正是所谓的输出缓冲。比如说,你从差异的函数得到像那样的剧情:

function print_header()
{
    echo "<div id='header'>Site Log and Login links</div>";
}

function print_footer()
{
    echo "<div id='footer'>Site was made by me</div>";
}

print_header();
for($i = 0 ; $i < 100; $i++)
{
    echo "I is : $i <br />';
}
print_footer();

骨子里你应有先在二个地点搜罗全部出口。你能够要么将它存款和储蓄于函数中的变量内部,要么接收ob_start和ob_end_clean。所以,未来应当看起来像这么

function print_header()
{
    $o = "<div id='header'>Site Log and Login links</div>";
    return $o;
}

function print_footer()
{
    $o = "<div id='footer'>Site was made by me</div>";
    return $o;
}

echo print_header();
for($i = 0 ; $i < 100; $i++)
{
    echo "I is : $i <br />';
}
echo print_footer();

那便是说,为啥你应有做输出缓冲呢:

  • 您能够在将出口发送给浏览器在此之前改善它,如若您须要的话。比方做一些str_replaces,或者preg_replaces,又大概是在结尾增加一些额外的html,比方profiler/debugger输出。
  • 出殡输出给浏览器,并在同期做php管理并非好主意。你见过如此的网址,它有叁个Fatal
    error在左侧栏或在荧屏中间的四方中吗?你精晓干什么会并发这种气象呢?因为管理进程和出口被混合在了协作。

2. 永不直接利用 require, include, include_once, required_once
能够在剧本底部引进多个文本, 像类库, 工具文件和帮助办公室函数等, 如:

8.当输出非HTML内容时,通过header发送正确的mime类型

请看有的XML。

$xml = '<?xml version="1.0" encoding="utf-8" standalone="yes"?>';
$xml = "<response>
  <code>0</code>
</response>";

//Send xml data
echo $xml;

职业健康。但它须要有的校订。

$xml = '<?xml version="1.0" encoding="utf-8" standalone="yes"?>';
$xml = "<response>
  <code>0</code>
</response>";

//Send xml data
header("content-type: text/xml");
echo $xml;

请留意header行。那行代码告诉浏览器那一个剧情是XML内容。因而,浏览器能够科学地拍卖它。大多JavaScript库也都依赖于header音讯。

JavaScript,css,jpg图片,png图像也是均等:

JavaScript

header("content-type: application/x-javascript");
echo "var a = 10";

CSS

header("content-type: text/css");
echo "#div id { background:#000; }"
require_once; require_once; require_once('helpers/utitlity_functions.php');

9.为MySQL连接装置科学的字符编码

曾遭逢过unicode/utf-8字符被正确地囤积在mysql表的标题,phpmyadmin也显得它们是科学的,不过当您使用的时候,你的网页上却并无法科学地出示。里面包车型大巴神妙在于MySQL连接核对。

$host = 'localhost';
$username = 'root';
$password = 'super_secret';

//Attempt to connect to database
$c = mysqli_connect($host , $username, $password);

//Check connection validity
if (!$c) 
{
    die ("Could not connect to the database host: <br />". mysqli_connect_error());
}

//Set the character set of the connection
if(!mysqli_set_charset ( $c , 'UTF8' ))
{
    die('mysqli_set_charset() failed');
}

风姿浪漫经您总是到数据库,无妨设置连接字符集。当您在你的应用程序中运用三种语言时,这纯属有不能缺少。

不然会产生什么呢?你会在非意大利共和国语文本中看出不菲的正方和????????。

这种用法极度原始. 应该越来越灵敏点. 应编制个助手函数包括文件. 举个例子:

10.运用含有正确字符集选项的htmlentities

PHP 5.4事情未发生前,使用的暗中认可字符编码是ISO-8859-1,那不能够显得举例À â
那样的字符。

$value = htmlentities($this->value , ENT_QUOTES , 'UTF-8');

从PHP
5.4起,暗中认可编码成了UTF-8,那消亡了许多的题目,但你最棒依然明白这事,倘让你的应用程序使用三种语言的话。

先介绍那11个技巧,剩下的PHP能力大家将要接下去的篇章中为大家享用,多谢您的翻阅。

function load_class { //path to the class file $path = ROOT . '/lib/' . $class_name . '.php'); require_once; } load_class; load_class;

有哪些不相符呢? 该代码更具可读性。未来您能够按需扩展该函数, 如:

function load_class { //path to the class file $path = ROOT . '/lib/' . $class_name . '.php'); if { require_once; } }

还可做得更加多: 为相符文件查找八个目录。能相当的轻巧的改观放置类公事的目录,
无须在代码随地意气风发豆蔻梢头改过。可应用相仿的函数加载文件, 如html内容.

3. 为使用保留调节和测量试验代码 在付出条件中, 我们打字与印刷数据库查询语句,
转存十分的变量值, 而大器晚成旦难点一举成功, 大家讲明或删除它们.
但是更加好的做法是保留调节和测量试验代码。在开辟情状中, 你能够:

define('ENVIRONMENT' , 'development'); if(! $db->query { if(ENVIRONMENT == 'development') { echo "$query failed"; } else { echo "Database error. Please contact administrator"; } }

在服务器中, 你能够:

define('ENVIRONMENT' , 'production'); if(! $db->query { if(ENVIRONMENT == 'development') { echo "$query failed"; } else { echo "Database error. Please contact administrator"; } }

4. 应用可跨平台的函数施行命令 system, exec, passthru, shell_exec
那4个函数可用来实践系统命令. 每一种的一举一动都有一线差异. 难题在于,
当在分享主机中, 某个函数恐怕被接受性的禁止使用.
大大多新手趋于每便首先检查哪个函数可用,
然则再使用它。越来越好的方案是封成函数贰个可跨平台的函数.

/** Method to execute a command in the terminal Uses : 1. system 2. passthru 3. exec 4. shell_exec */ function terminal { //system if(function_exists { ob_start(); system($command , $return_var); $output = ob_get_contents; } //passthru else if(function_exists { ob_start(); passthru($command , $return_var); $output = ob_get_contents; } //exec else if(function_exists { exec($command , $output , $return_var); $output = implode; } //shell_exec else if(function_exists { $output = shell_exec ; } else { $output = 'Command execution not possible on this system'; $return_var = 1; }return array('output' => $output , 'status' => $return_var); } terminal;

地方的函数将运营shell命令, 只要有一个种类函数可用, 那保持了代码的同样性.

5. 得心应手编写函数

function add_to_cart { $_SESSION['cart']['item_id'] = $qty; }add_to_cart;

接纳方面包车型地铁函数增加单个项目. 而当加多项列表的时候,你要创建另三个函数吗?
不用, 只要稍加注意分歧种类的参数, 就能够更加灵活. 如:

function add_to_cart { if { $_SESSION['cart']['item_id'] = $qty; } else { foreach($item_id as $i_id => $qty) { $_SESSION['cart']['i_id'] = $qty; } } } add_to_cart; add_to_cart( array('IPHONE3' => 2 , 'IPAD' => 5) );

现在, 同个函数能够管理不一致品类的输入参数了.
能够参见上面的事例重构你的多处代码, 使其更智能.

6. 有意忽视php关闭标签
小编很想领悟为何这么多关于php建议的博客随笔都没涉及这一点.

这将节约你很多时间. 我们举个例子: 一个 super_class.php 文件

//super extra character after the closing tag

require_once; //echo an image or pdf , or set the cookies or session data

如此, 你将会博得贰个 Headers already send error. 为何? 因为 “super
extra character” 已经被输出了. 今后您得初叶调治将养啦. 那会费用多量光阴寻觅super extra 的职位。由此, 养成省略关闭符的习贯:

7. 在某地方收集所有输入, 一次输出给浏览器 这称为输出缓冲, 假如说你已在不同的函数输出内容: function print_header() { echo "Site Log and Login links"; } function print_footer() { echo "Site was made by me"; } print_header(); for($i = 0 ; $i < 100; $i++) { echo "I is : $i '; }print_footer();

替代方案, 在某地点聚焦搜聚输出. 你能够储存在函数的局部变量中,
也足以行使ob_start和ob_end_clean. 如下:

function print_header() { $o = "Site Log and Login links"; return $o; }function print_footer() { $o = "Site was made by me"; return $o; }echo print_header(); for($i = 0 ; $i < 100; $i++) { echo "I is : $i '; } echo print_footer();

为什么需求输出缓冲: >>能够在发送给浏览器前校勘输出. 如
str_replaces 函数或大概是 preg_replaces 或增多些监察和控制/调节和测量检验的html内容.
>>输出给浏览器的还要又做php的拍卖很倒霉.
你应有见到过某些站点的左侧栏或中等出现谬误新闻. 知道怎么会生出呢?
因为管理和出口混合了.

8. 出殡和下葬精确的mime类型头新闻, 假诺输出非html内容的话. 输出一些xml.

$xml = ''; $xml = " 0 ";//Send xml data echo $xml;

做事得不错. 但要求一些改正.

$xml = ''; $xml = " 0 "; //Send xml data header("content-type: text/xml"); echo $xml;

介意header行. 该行告知浏览器发送的是xml类型的内容.
所以浏览器能科学的管理. 比非常多的javascript库也凭仗头新闻. 相似的有
javascript , css, jpg image, png image:

JavaScriptheader("content-type: application/x-javascript"); echo "var a = 10"; CSSheader("content-type: text/css"); echo "#div id { background:#000; }";

9. 为mysql连接装置科学的字符编码
曾经境遇过在mysql表中安装了unicode/utf-8编码, phpadmin也能科学显示,
但当你获取内容并在页面输出的时候,会现身乱码.
这里的难题出在mysql连接的字符编码.

//Attempt to connect to database $c = mysqli_connect($this->host , $this->username, $this->password); //Check connection validity if  { die ("Could not connect to the database host: ". mysqli_connect_error; } //Set the character set of the connectionif(!mysqli_set_charset  { die failed'); }

假诺三回九转数据库, 最棒设置连接的 characterset. 你的应用借使要帮衬多语言,
这么做是必需的.

10. 利用 htmlentities 设置科学的编码选项 php5.4前,
字符的暗中认可编码是ISO-8859-1, 不能向来出口如À â等.

$value = htmlentities($this->value , ENT_QUOTES , CHARSET);

php5.4现在, 暗许编码为UTF-8, 那将一蹴而就广大难题. 但只要您的应用是多语言的,
仍旧要注意编码难点,.

11. 并不是在应用中利用gzip压缩输出, 让apache管理 考虑过使用
ob_gzhandler 吗? 不要那么做. 一点意义都未有. php只利用来编排应用.
不应操心服务器和浏览器的数额传输优化难点.
使用apache的mod_gzip/mod_deflate 模块压缩内容.

12. 使用json_encode输出动态javascript内容
时常会用php输出动态javascript内容:

$images = array( 'myself.png' , 'friends.png' , 'colleagues.png' );$js_code = '';foreach{$js_code .= "'$image' ,";}$js_code = 'var images = [' . $js_code . ']; ';echo $js_code;//Output is var images = ['myself.png' ,'friends.png' ,'colleagues.png' ,]; 更聪明的做法, 使用 json_encode: $images = array( 'myself.png' , 'friends.png' , 'colleagues.png' );$js_code = 'var images = ' . json_encode; echo $js_code;//Output is : var images = ["myself.png","friends.png","colleagues.png"]

13. 写文件前, 检查目录写权限 写或保存文件前, 确认保证目录是可写的,
借使不可写, 输出错误音讯. 这会省去你不菲调度时间. linux系统中,
需求管理权限, 目录权限不当会促成众多众多的标题,
文件也可能有非常的大或许无法读取等等. 确认保障您的运用充裕智能, 输出有些主要音讯.

$contents = "All the content";$file_path = "/var/www/project/content.txt"; file_put_contents($file_path , $contents);

那大致上正确. 但稍事直接的难题. file_put_contents
也许会出于多少个原因退步: >>父目录不设有 >>目录存在, 但不可写
>>文件被写锁住? 所以写文件前做鲜明的反省更加好.

$contents = "All the content"; $dir = '/var/www/project'; $file_path = $dir . "/content.txt"; if { file_put_contents($file_path , $contents); } else { die("Directory $dir is not writable, or does not exist. Please check"); }

诸如此比做后, 你会获取叁个文本在哪里写及为何战败的明明新闻.

14. 改良应用成立的文件权限 在linux碰到中,
权限难题恐怕会浪费你多多时间. 从今未来, 无论曾几何时, 当你创制一些文本后,
确定保障使用chmod设置正确权限. 不然的话, 可能文件首先由”php”客户成立,
但你用其它的顾客登入专门的学问, 系统将会屏绝访谈或展开文件,
你只可以奋力获取root权限, 改良文件的权杖等等.

// Read and write for owner, read for everybody else chmod("/somedir/somefile", 0644); // Everything for owner, read and execute for others chmod("/somedir/somefile", 0755);

15. 无须重视submit开关值来检查表单提建行为

if($_POST['submit'] == 'Save') { //Save the things }

上边大超级多动静不错, 除了利用是多语言的. ‘Save’ 恐怕意味着任何含义.
你怎么分裂它们呢. 由此, 不要依据于submit按钮的值.

if( $_SERVER['REQUEST_METHOD'] == 'POST' and isset { //Save the things }

今后你从submit按键值中超脱出来了.

16. 为函数内总具备相仿值的变量定义成静态变量

//Delay for some time function delay() { $sync_delay = get_option; echo "Delaying for $sync_delay seconds..."; sleep; echo "Done "; }

//Delay for some time function delay() { static $sync_delay = null; if { $sync_delay = get_option; } echo "Delaying for $sync_delay seconds..."; sleep; echo "Done "; }

17. 永不直接使用 $_SESSION 变量 某个轻松例子:

$_SESSION['username'] = $username; $username = $_SESSION['username'];

那会促成一些难题. 借使在同个域名中运转了多个利用, session
变量大概会冲突. 四个不等的行使恐怕采纳同三个session key. 比方,
三个前端门户, 和七个后台管理类别利用同大器晚成域名。从现行反革命始于,
使用使用相关的key和贰个装进函数:

define('APP_ID' , 'abc_corp_ecommerce'); //Function to get a session variable function session_get { $k = APP_ID . '.' . $key; if { return $_SESSION[$k]; } return false; } //Function set the session variable function session_set { $k = APP_ID . '.' . $key; $_SESSION[$k] = $value; return true; }

18. 将工具函数封装到类中 假让你在某文件中定义了成都百货上千工具函数:

function utility_a() { //This function does a utility thing like string processing }function utility_b() { //This function does nother utility thing like database processing } function utility_c() { //This function is ... }

那一个函数的利用分散到使用随处. 你可能想将他们包裹到某些类中:

class Utility {public static function utility_a(){}public static function utility_b() { }public static function utility_c() { } }//and call them as $a = Utility::utility_a(); $b = Utility::utility_b();

猛烈的补益是, 假诺php内建有同名的函数, 这样能够幸免冲突.
另生机勃勃种观点是, 你能够在同个应用中为同个类爱惜三个本子, 而不变成冲突.
那是包装的骨干好处, 无它.

19. Bunch of silly tips >>使用echo取代print
>>使用str_replace取代preg_replace, 除非你相对供给>>不要接受 short tag >>轻易字符串用单引号替代双引号
>>head重定向后回想使用exit >>不要在循环中调用函数
>>isset比strlen快 >>始中如生机勃勃的格式化代码
>>不要删除循环或许if-else的括号 不要这么写代码:

if $a_count++;

这绝对WASTE。写成:

if { $a_count++; }

并不是尝试省略一些语法来浓缩代码. 而是让您的逻辑简短.
>>使用有高亮语法呈现的文本编辑器. 高亮语法能让您减弱错误.

20. 使用array_map飞速管理数组 举个例子说你想 trim 数组中的全体成分.
生手恐怕会:

foreach { $arr[$c] = trim; }

但使用 array_map 更简单:

$arr = array_map;

那会为$arr数组的每一个成分都报名调用trim. 另叁个近乎的函数是 array_walk.
请查阅文书档案学习更加多本事.

21. 使用 php filter 验证数据 你明显曾采纳过正则表明式验证 email ,
ip地址等. 是的,每一种人都这么使用. 以后, 大家想做差别的品味, 称为filter.
php的filter增添提供了简便的秘技注脚和检讨输入.

22. 免强类型检查

$amount = intval;$rate =  $_GET['rate'];

23. 固然必要,使用profiler如xdebug 假设您利用php开辟大型的利用,
php担任了过多运算量, 速度会是三个很要紧的指标. 使用profile扶助优化代码.
可利用xdebug和webgrid.

24. 小心管理大数组 对于大的数组和字符串, 必得小心管理.
不以为奇错误是发生数组拷贝招致内部存储器溢出,抛出Fatal Error of Memory size 消息:

$db_records_in_array_format; //This is a big array holding 1000 rows from a table each having 20 columns , every row is atleast 100 bytes , so total 1000 * 20 * 100 = 2MB$cc = $db_records_in_array_format; //2MB moresome_function; //Another 2MB ?

当导入或导出csv文件时,
平时会这么做。不要感觉上面的代码会平日因内部存款和储蓄器节制招致脚本崩溃.
对于小的变量是没难点的, 但管理大数组的时候就非得幸免. 确认保证通过引用传递,
或存储在类变量中:

$a = get_large_array(); pass_to_function;

如此那般做后, 向函数字传送递变量援用. 查看文书档案.

class A { function first() { $this->a = get_large_array(); $this->pass_to_function(); } function pass_to_function() { //process $this->a } }

急速的 unset 它们, 让内部存款和储蓄器得以自由,减轻脚本担负.

25. 长久使用单生龙活虎数据库连接
确定保证您的台本由始至终都选拔单生机勃勃的数据库连接. 在起来处正确的开发连接,
使用它直到停止, 最终关闭它. 不要像下边那样在函数中开发连接:

function add_to_cart() {$db = new Database(); $db->query("INSERT INTO cart ....."); } function empty_cart() {$db = new Database(); $db->query("DELETE FROM cart ....."); }

接受多少个一连是个倒霉的, 它们会拖慢应用,
因为创建连接须要时刻和占用内部存款和储蓄器。特定情景使用单例格局, 如数据库连接.。

那一个秘诀是还是不是很完美,相信一定会将对咱们学习php程序设计有着协助。

发表评论

电子邮件地址不会被公开。 必填项已用*标注