高质量PHP代码的50个技巧(3)

 我来答
华源网络
2022-07-11 · TA获得超过5694个赞
知道小有建树答主
回答量:2486
采纳率:100%
帮助的人:164万
展开全部

  42

  43

  44

  45

  /**

  Method to execute a command in the terminal

  Uses :

  1. system

  2. passthru

  3. exec

  4. shell_exec

  */

  function terminal($command)

  {

  //system

  if(function_exists('system'))

  {

  ob_start();

  system($command , $return_var);

  $output = ob_get_contents();

  ob_end_clean();

  }

  //passthru

  else if(function_exists('passthru'))

  {

  ob_start();

  passthru($command , $return_var);

  $output = ob_get_contents();

  ob_end_clean();

  }

  //exec

  else if(function_exists('exec'))

  {

  exec($command , $output , $return_var);

  $output = implode("\n" , $output);

  }

  //shell_exec

  else if(function_exists('shell_exec'))

  {

  $output = shell_exec($command) ;

  }

  else

  {

  $output = 'Command execution not possible on this system';

  $return_var = 1;

  }

  return array('output' => $output , 'status' => $return_var);

  }

  terminal('ls');

  上面的函数将运行shell命令, 只要有一个系统函数可用, 这保持了代码的一致性.

  5. 灵活编写函数

  ?

  1

  2

  3

  4

  5

  6

  function add_to_cart($item_id , $qty)

  {

  $_SESSION['cart']['item_id'] = $qty;

  }

  add_to_cart( 'IPHONE3' , 2 );

  使用上面的函数添加单个项目. 而当添加项列表的时候,你要创建另一个函数吗? 不用, 只要稍加留意不同类型的参数, 就会更灵活. 如:

  ?

  1

  2

  3

  4

  5

  6

  7

  8

  9

  10

  11

  12

  13

  14

  15

  16

  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) );

  现在, 同个函数可以处理不同类型的输入参数了. 可以参照上面的例子重构你的多处代码, 使其更智能.

  6. 有意忽略php关闭标签

  我很想知道为什么这么多关于php建议的博客文章都没提到这点.

  ?

  1

  2

  3

  <?php

  echo "Hello";

  //Now dont close this tag

  这将节约你很多时间. 我们举个例子:

  一个 super_class.php 文件

  ?

  1

  2

  3

  4

  5

  6

  7

  8

  9

  <?php

  class super_class

  {

  function super_function()

  {

  //super code

  }

  }

  ?>

  //super extra character after the closing tag

  index.php

  ?

  1

  2

  require_once('super_class.php');

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

  这样, 你将会得到一个 Headers already send error. 为什么? 因为 “super extra character” 已经被输出了. 现在你得开始调试啦. 这会花费大量时间寻找 super extra 的位置。因此, 养成省略关闭符的习惯:

  ?

  1

  2

  3

  4

  5

  6

  7

  8

  9

  <?php

  class super_class

  {

  function super_function()

  {

  //super code

  }

  }

  //No closing tag

  这会更好.

  7. 在某地方收集所有输入, 一次输出给浏览器

  这称为输出缓冲, 假如说你已在不同的函数输出内容:

  ?

  1

  2

  3

  4

  5

  6

  7

  8

  9

  10

  11

  12

  13

  14

  function print_header()

  {

  echo "<p id='header'>Site Log and Login links</p>";

  }

  function print_footer()

  {

  echo "<p id='footer'>Site was made by me</p>";

  }

  print_header();

  for($i = 0 ; $i < 100; $i++)

  {

  echo "I is : $i ';

  }

  print_footer();

  替代方案, 在某地方集中收集输出. 你可以存储在函数的局部变量中, 也可以使用ob_start和ob_end_clean. 如下:

  ?

  1

  2

  3

  4

  5

  6

  7

  8

  9

  10

  11

  12

  13

  14

  15

  16

  function print_header()

  {

  $o = "<p id='header'>Site Log and Login links</p>";

  return $o;

  }

  function print_footer()

  {

  $o = "<p id='footer'>Site was made by me</p>";

  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.

  ?

  1

  2

  3

  4

  5

  6

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

  $xml = "<response>

  <code>0</code>

  </response>";

  //Send xml data

  echo $xml;

  工作得不错. 但需要一些改进.

  ?

  1

  2

  3

  4

  5

  6

  7

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

  $xml = "<response>

  <code>0</code>

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
北京磐安云创科技有限公司_
2023-02-01 广告
价格只是购买产品或服务过程中的一项指标,如果单纯只比较价格,其实考虑并不是那么周到。价格、质量、服务、口碑、是否合适自己的情况等都需要一起考虑。以上回答如果还觉得不够详细,可以来咨询下北京磐安公司。北京磐安公司是一家专业从事高新软件的技术公... 点击进入详情页
本回答由北京磐安云创科技有限公司_提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式