首页 后端开发 php教程 PHP 高手之路(一)_php基础

PHP 高手之路(一)_php基础

May 17, 2016 am 09:47 AM

PHP是一门高效的网络编程语言,由于它具有编写灵活、运行快速等优点,迅速成为Web程序员的首选语言。前不久的一份权威调查表明,现在已经有31.6%的网站使用PHP作为主要的服务器端编程语言。
  但是,要成为一名PHP编程高手却并不容易。并不像很多人想象的那样,只要能够飞快地编写几条简单的代码去解决一个复杂的问题就是PHP编程高手了,真正的PHP高手还需要考虑更多的其它问题。以下三条准则是一名成熟的PHP程序员在编程中应该首先遵循的准则。
  1.懒惰是金
  2.编写漂亮的代码
  3.追求程序的速度,而不是编程的速度
  一、懒惰是金
  做一个懒惰的程序员吗?这个想法太奇怪了!因为这个世界上最忙碌的人可能就是计算机程序员了。但正是因为程序员太忙了,所以才应该在编程时学会偷懒。
  对于一个程序员来说,懒惰的方法有两种:其一,大胆使用现成的别人的程序代码,把这些代码融入到你自己的程序或者项目中去。其二是编写一些有用的代码建立一个函数库,在将来编写程序时可以顺手拈来,省去了许多重复的劳动,自然就可以懒惰一点了。
  这两种偷懒的方法都非常适合PHP程序员了。
  首先,PHP是在自由开放的环境中诞生和成长的一门语言。在世界各地,有成千上万的程序员,他们一直在为PHP的完美而不断奋斗,他们也愿意和别人分享自己的聪明才智和自己编写的代码。你每天都可以从一些PHP网站、邮件列表、新闻组发现大量的优秀的程序代码。这样说,我并不是鼓励你整天等着让别人为你编写代码,但是你可以“站在伟人的肩膀上”,充分发扬“拿来主义”,聪明地应用别人的程序代码可以节省你大量时间。其次,在PHP中,你可以方便地建立自己的函数库,这样可以在你以后编写程序时省去很多麻烦。
  下面笔者为大家介绍几个通用的函数,这些函数有的来自网上的一些开放源代码的项目,有的精选自邮件列表。如果你能把它们加入到你自己的函数库中,迟早你将会发现自己受益无穷。
  1.通用数据库处理函数
  和其它的CGI函数相比,PHP的优点之一是具有很强大的数据库处理能力。但是,在PHP中,对于不同的数据库都使用一些特定的函数来专门处理,缺少通用的数据库处理函数。这大大降低了程序代码的可移植性,这也为初学编程的朋友带来了很多不便。
  在网上,许多程序员都通过封装类解决了这个问题。他们编写了统一的函数用来处理任何流行的数据库——不管是在Linux世界深受欢迎的Mysql还是在Windows平台上广泛流行的SqlServer。就笔者个人来说,非常喜欢使用这些函数,因为可以直接使用一些简单的诸如"query"、"next_record"之类的函数,而不需要考虑数据库的连接、数据库句柄这些复杂的东西,更不需要考虑使用的是何种数据库。
  如果你需要这些函数,你可以通过访问以下的几个网址而得到:
  http://phplib.netuse.de/
  http://phpclasses.UpperDesign.com/browse.html/package/20
  http://phpdb.linuxbox.com/
  2.变量调试函数
  PHP程序的调试一直是一件让人头疼的事,它既不像VB等高级语言那样有集成的编译调试环境,也不想Perl那样可以在Linux或者DOS环境下直接运行。其实,我们完全可以通过灵活地使用echo语句来完成对PHP的调试工作。
  下面的几个函数可以让你随时查看程序中任何变量的类型及其值。
  function ss_array_as_string (&$array, $column = 0) {
  $str = "Array(
n";
  while(list($var, $val) = every($array) ){
  for ($i = 0; $i   $str .= "    ";
  }
  $str . = $var.==> ;
  $str .= ss_as_string($val, $column+1)."
n";
  }
  for ($i = 0; $i   $str .= "    ";
  }
  返回 $str.);
  }
  function ss_object_as_string (&$object, $column = 0) {
   if (empty($object->classname)) {
  return "$object";
  }
  else {
  $str = $object->classname."(
n";
  while (list(,$var) =each($object->persistent_slots)) {
  for ($i = 0; $i   $str .= "    ";
  }
  全局 $$var ;
  $str .= $var.==> ;
  $str .= ss_as_string($$var, 列+1)."
  }
  for ($i = 0; $i   $str .= "    "   }
  返回 $str.);
  }
  }
  function ss_as_string (&$thing, $column = 0) {
  if (is_object($thing)) {
  return ss_object_as_string($thing, $column);
  }
  elseif (is_array($thing)) {
  return ss_array_as_string($thing, $column);
  }
  elseif (is_double($thing)) {
  return "Double(".$thing.")";
  }
  elseif (is_long($thing)) {
  return "Long(".$thing.")";
  }
  elseif (is_string($thing)) {
  return "String(".$thing.")";
  }
  else {
  return "Unknown(".$thing.")";
  }
  }
  需要的时候,在程序中简单地加入下面的一条代码即可查看程序中所使用的变量(包括数据库和对象)的类型和值:
  echo ss_as_string($my_variable);
  使用下面的语句,我们可以直接查看程序中所有变量的值:
  echo ss_as_string($GLOBALS);
  3.控制日志信息的函数
  调试PHP程序的另外一个重要的方法就是查看日志信息。如果能够方便地控制日志信息的级别以及日志信息的显示内容,将会给程序调试带来更多的便利。下面的几个函数可以方便地实现这个功能。
  $ss_log_level = 0;
  $ss_log_filename = /tmp/ss-log;
  $ss_log_levels = array(
  无 => 0,
  错误 => 1,
  信息 => 2,
  调试 => 3);
  function ss_log_set_level ($level = ERROR) {
  global $ss_log_level;
  $ss_log_level = $level;
  }
  function ss_log ($level, $message) {
  global $ss_log_level, $ss-log-文件名;
  if ($ss_log_levels[$ss_log_level]   // 不显示日志信息   return false;
  }
  $fd = fopen($ss_log_filename, "a+");
  fputs($fd, $level. - [.ss_timestamp_pretty().] - .$message."n");
  fclose($fd);
  返回 true;
  }
  function ss_log_reset () {
  global $ss_log_filename;
  @unlink($ss_log_filename);
  }
  在上面的函数中,有四个日志级别变量。运行PHP程序时,只有当日志的级别低于默认的级别值时,日志信息才可以被记录并显示出来。 ,在程序中加入如下的一条语句:
  ss_log_set_level(INFO);
  那么,运行PHP程序时,只有ERROR和INFO级别的LOG信息才能被记录并显示出来,DEBUG级别的信息则被忽略掉了。除此之外,我们还可以设置显示的信息内容,其语句如下:
  ss_log(ERROR, "测试级别 ERROR");
  ss_log(INFO, "测试级别 INFO");
  ss_log(DEBUG, "测试级别 DEBUG");
  你也可以随时使用下面的语句清空LOG信息:
  ss_log_reset();
  4.速度测试函数

    为了优化代码,我们需要一种可以测试代码运行时间的方法,从而来选择最优化的代码。下面的函数可以测试运行代码所需的时间:
  function ss_timing_start ($name = default) {
  global $ss_timing_start_times;
  $ss_timing_start_times[$name] =explode( , microtime());
  }
  function ss_timing_stop ($name = default) {
  global $ss_timing_stop_times;
  $ss_timing_stop_times[$name] =explode(, microtime());
  }
  function ss_timing_current ($name = default) {
  全局 $ss_timing_start_times, $ss_timing_stop_times;
  if (!isset($ss_timing_start_times[$name])) {
  return 0;
  }
  if (!isset($ss_timing_stop_times[$name])) {
  $stop_time = Explode(, microtime());
  }
  else {
  $stop_time = $ss_timing_stop_times[$name];
  }
  $当前 = $stop_time[1] - $ss_timing_start_times[$name][1];
  $当前 += $stop_time[0] - $ss_timing_start_times[$name][0];
  返回$当前;
  }
  现在可以轻松地检查任何一段代码的执行时间了,甚至我们可以同时使用多个计时器,只需在使用上述的几个函数时设置不同的参数作为计时器的名称
  5.调试速度和优化数据库的一些操作
  对于数据库来说,运行是至关重要的。虽然很多书籍和文章都讲授了快速运行数据库的方法,但是所有的方法都必须经过实践的检验。下面我们将把PHPLib函数库中的query()函数和上面介绍的几个函数综合起来编写成新的query()函数,和提取的函数相比,这个函数增加了运行
  function query($Query_String, $halt_on_error = 1) {
  $this->connect();
  ss_timing_start();
  $this->Query_ID = @mysql_query($Query_String,$this->Link_ID);
  ss_timing_stop();
  ss_log(INFO, ss_timing_current().Secs - .$Query_String);
  $this->行  = 0;
  $this->Errno = mysql_errno();
  $this->Error = mysql_error();
  if ($halt_on_error && !$this->Query_ID) {
  $this->halt("无效的 SQL: ".$Query_String);
  }
  return $this->Query_ID;
  }(未完成待续)

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
威尔R.E.P.O.有交叉游戏吗?
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

在PHP API中说明JSON Web令牌(JWT)及其用例。 在PHP API中说明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

描述扎实的原则及其如何应用于PHP的开发。 描述扎实的原则及其如何应用于PHP的开发。 Apr 03, 2025 am 12:04 AM

SOLID原则在PHP开发中的应用包括:1.单一职责原则(SRP):每个类只负责一个功能。2.开闭原则(OCP):通过扩展而非修改实现变化。3.里氏替换原则(LSP):子类可替换基类而不影响程序正确性。4.接口隔离原则(ISP):使用细粒度接口避免依赖不使用的方法。5.依赖倒置原则(DIP):高低层次模块都依赖于抽象,通过依赖注入实现。

解释PHP中晚期静态结合的概念。 解释PHP中晚期静态结合的概念。 Mar 21, 2025 pm 01:33 PM

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸

如何用PHP的cURL库发送包含JSON数据的POST请求? 如何用PHP的cURL库发送包含JSON数据的POST请求? Apr 01, 2025 pm 03:12 PM

使用PHP的cURL库发送JSON数据在PHP开发中,经常需要与外部API进行交互,其中一种常见的方式是使用cURL库发送POST�...

框架安全功能:防止漏洞。 框架安全功能:防止漏洞。 Mar 28, 2025 pm 05:11 PM

文章讨论了框架中的基本安全功能,以防止漏洞,包括输入验证,身份验证和常规更新。

如何在系统重启后自动设置unixsocket的权限? 如何在系统重启后自动设置unixsocket的权限? Mar 31, 2025 pm 11:54 PM

如何在系统重启后自动设置unixsocket的权限每次系统重启后,我们都需要执行以下命令来修改unixsocket的权限:sudo...

自定义/扩展框架:如何添加自定义功能。 自定义/扩展框架:如何添加自定义功能。 Mar 28, 2025 pm 05:12 PM

本文讨论了将自定义功能添加到框架上,专注于理解体系结构,识别扩展点以及集成和调试的最佳实践。

See all articles