PHP开发知识总结:基础篇

之前一直用的比较多的是ASP/ASP.NET语言,最近由于整个网站的技术平台转向了PHP平台,这些系统的小修小改和开发新的应用都需PHP语言来编写了,总结一下近段时间的一些PHP知识点。以备查之用。

1,基础语法
  PHP的语法都是属于C系列的,类似C,C#,JAVA等语言,所以一般的语句都大同小异。总结一些特殊的语法形式:
  可变变量(动态变量):
  $var = 'php' ;
  $$var = 'the php var' ;
  echo $php ; //输出the php var

  字符串中的变量解析:
  $var = 'php' ;
  echo "hello $var" ; //输出hello php , 为了不产生解析错误,最好再变量上加{}符,即"hello {$var}",详细的变量解析规则可以参见PHP的变量解析规则文档。

  单引号和双引号的区别:
  单,双引号都可以表示字符串,其区别在于转义的层次,单引号只转义\,而双引号则转义所有可转义的特殊字符,所以只表示常规字符,使用单引号比双引号的速度更快。

   NULL和空值:
  $var ;
  echo isset($var) ? 'not null' : 'null' ;    //输出 null
  echo empty($var) ? 'empty' : 'not empty' ; //输出 empty
  
  $var = '' ;
  echo isset($var) ? 'not null' : 'null' ;    //输出 not null
  echo empty($var) ? 'empty' : 'not empty' ; //输出 empty
  
  $var = 0 ;
  echo isset($var) ? 'not null' : 'null' ;    //输出 not null
  echo empty($var) ? 'empty' : 'not empty' ; //输出 empty
  
   数组的操作技巧
 $arr = array('key1'=>'value1','key2'=>'value2');
 while(list($k,$v) = each($arr))
 {
    echo "$k,$v" ;
 }

  foreach($arr as $k=>$v)
 {
    echo "$k,$v" ;
 }
将数组复制为变量:
 extract($arr ); //相反的函数是compact() 
 echo "$key1 $key2" ;
 数组判断:
 echo is_array($arr) ? 'array' : 'not array' ;  //输出array
 echo gettype($arr) == 'array' ? 'array' : 'not array';//这样处理也可以,输出array,不过这样用法比较少见

变量函数:
 function a()
 {
    echo "the function a" ;
 }
 
 function b($arg)
 {
    echo "$arg" ;
 }
 
 $x = 'a' ;
 $x() ; //输出the function a
 
 
 $x = 'b' ;
 $x('the function b') ; //输出the function b

几个PHP的“魔术常量”:
__LINE__    文件中的当前行号。
__FILE__     文件的完整路径和文件名。如果用在包含文件中,则返回包含文件名。自PHP4.0.2 起,__FILE__总是包含一个绝对路径,而在此之前的版本有时会包
含一个相对路径
__FUNCTION__  函数名称(PHP4.3.0 新加)。自PHP5 起本常量返回该函数被定义时的名字(区分大小写)。在PHP4 中该值总是小写字母的。
__CLASS__  类的名称(PHP4.3.0 新加)。自PHP5 起本常量返回该类被定义时的名字(区分大小写)。在PHP4 中该值总是小写字母的。
__METHOD__   类的方法名(PHP5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。

2,时间的处理
  time() 函数返回的是unix时间戳,其值跟时区设置是无关的。
  date(format,time) : 格式化本地时间,不同的时区设置会返回不同的值
   通过设置php.ini文件的date.timezone=或者在程序文件设置ini_set('date.timezone','Asia/Shanghai');影响其返回值
 
  gmdate(format,time) : 格式化一个 GMT/UTC 日期/时间,返回的是格林威治标准时(GMT)。

  所以最优的处理方式,不是直接设置php.ini或者通过ini_set来指定时区,而是存储的时time()的值,然后根据指定时区gmdate一个时间,如,显示中国的时间(与标准相差8小时),则代码写法如下:
  echo gmdate('Y-m-d H:i:s', time() + 3600 * 8);

3,魔法引用函数
  魔法引用即是当数据出现' , " ,\时加上转义字符\。
  php提供了两个相关的设置:magic_quotes_gpc和magic_quotes_runtime
  具体说明:
magic_quotes_gpc 
作用范围是:WEB客户服务端;
作用时间:请求开始是,例如当脚本运行时.

magic_quotes_runtime
作用范围:从文件中读取的数据或执行exec()的结果或是从SQL查询中得到的;
作用时间:每次当脚本访问运行状态中产生的数据.

所以
magic_quotes_gpc的设定值将会影响通过Get/Post/Cookies获得的数据
magic_quotes_runtime的设定值将会影响从文件中读取的数据或从数据库查询得到的数据

   其行为受到php.ini的设置影响,不同的服务器的php.ini的设置可能不同,所以为了减少其依赖性,最优的处理方式应为如下:
   通过set_magic_quotes_runtime(0);禁用运行时转义
  然后在程序中根据需要转义和反转义,如处理表单提交数据时:
  if(!get_magic_quotes_gpc())
  {
        addslashes($_POST['VAR']) ;//如没有转义,则使用转义函数
  }
  在显示数据时,可通过反转义stripslashes(),即去掉\,获得原始形式的数据。

4,错误报告
 在程序发布时,建议在程序开头加上:
  error_reporting(0) ; //禁用错误报告,调试阶段可以设为error_reporting(E_ALL) ;
 

暂时就总结这些,有新的发现时,再更新。。。

posted @   kwklover  阅读(268)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示