PHP语法特点和技巧浅析

文/michaelgbw

php的开发者在程序开发界一直占有着一席之地,我也是这样的一个phper,我们今天并不是要说php是什么,我想这大家baidu,google一下,比我讲的清楚,这是肯定的。

在面试中,php的语法因为简单易懂,所以有时并不做为考察点出现,还有,目前就中国整个的php开发环境来说,thinkphp,yii,lavarel等框架已经是标配。我没事就会问自己,离开框架我们还会开发吗,或者说还能正确的开发吗,有时我们也会用php在cli的模式下运行,run个什么crontab什么的,这个可是没有框架给我们用呀。

所以 我们今天不说框架,不说原理(能力也有限),我们来说说原生的技巧。以下内容大多数都是我在学习,工作中遇到的。我们一起来看~

预定义常量

PATH_SEPARATOR //路径分隔符(Windows为分号,类Unix为冒号)
DIRECTORY_SEPARATOR //目录分隔符
PHP_EOL //当前系统的换行符
PHP_VERSION //PHP版本号
PHP_OS //PHP服务操作系统
PHP_SAPI //用来判断是使用命令行还是浏览器执行的,如果 PHP_SAPI=='cli' 表示是在命令行下执行
PHP_INT_MAX INT最大值,32位平台时值为2147483647
PHP_INT_SIZE INT字长,32位平台时值为4(4字节)
M_PI //圆周率值
M_E //自然数
FILE 所在文件的绝对路径
LINE 文件中的当前行号
DIR 文件所在目录
FUNCTION 函数名称
CLASS 类的名称
METHOD 类的方法名
NAMESPACE 当前命名空间的名称

可变标识符
//可变变量 
$i = 3;
$k = 'i';
echo $$k; //输出3
//可变函数
function func(){
    echo 'hello!';
}
 $i = 'func';
 $i(); //输出hello
//可变类名 
class CLS{
  public $k = 'hello';
} 
$i = 'CLS'; 
$j = new $i;
echo $j->k;
//可变属性 
  class CLS{  
      public $k = 'hello';
    } 
$i = 'k';
$j = new CLS;
echo $j->$i;
.//可变方法
class CLS{
public function k(){
echo 'hello';
}
}
 $i='k';
 $j=new CLS;
 $j->$i();
双引号,单引号

php中,单引号和双音号都可以定义一段字符串,但区别是双引号会默认在解析中进行处理。而单引号不会。

$user='gbw';
$sql="select * from user as u where u.name='$user'";

这个语句是正确解析出$user的。但单引号就不行了。但单引号直接display到view中去会更好,因为少了层解析,更快。
还有php的特定写法

$str = <<<EOT
  字符串内容
EOT;

就是三个<和一个名字将一大段字符包裹起来,这个方法是不需要“”的,一般用在中间大量引用html时。

empty(),isset(),==null,==0问题

为什么我会抛出这个问题呢,因为我曾经被他坑过,呜呜呜~

$string="php vs java,but we do not care result about this";
    $str="php";
    if(strpos($string,$str)){
        echo 'find';
    }
    else{
        echo 'no';
    }
//no

这个例子大家在php开发中会不会遇到呢,strpos()返回字符串中特定字符的位置,明显是0,好,php是弱类型语言,0和null一样,自然是no,对于这个问题,建议用strstr判断。
这只是个引子,

$str=0;
    if(!isset($str)){
        echo 'empty';
    }
    else{
        echo 'no';
    }//no
    if(empty($str)){
        echo 'empty';
    }
    else{
        echo 'no';
    }//empty
      if($str===null){
        echo 'empty';
    }
    else{
        echo 'no';
    }//no
        if($str==null){
        echo 'empty';
    }
    else{
        echo 'no';
    }//empty

这里大家应该都明白了的吧,null 即是empty(),0即是null,但0并不是===null,即0还是int,null是空.

闭包
function closureCreater() {
  $x = 1;
  return function($fun = null) use(&$x) {//按引用传值
    echo "<br />" . $x++;
    $fun and $fun();
  };
}
 
$x = "hello world";
$test = closureCreater();
$test();
$test(function(){ echo "closure test one"; });
$test(function(){ echo "closure test two"; });
$test(
    function() use($x)
        { echo "<br />".$x;
    });
结果

大家不知道除了js,php中还有闭包吧,但这里的php的闭包就没有js那般优雅了,要引用还要使用use方法,对于一般的闭包上面那个例子应该够用了。

php指针

大家会不会很疑惑,除了C,还有别的小兄弟有指针?

current/pos 返回当前被内部指针指向的数组单元的值,并不移动指针。
key 返回数组中当前单元的键名,并不移动指针
next 将数组中的内部指针向前移动一位,并返回移动后当前单元的值。先移动,再取值。
prev 将数组的内部指针倒回一位,并返回移动后当前单元的值先移动,再取值。
end 将数组的内部指针指向最后一个单元,并返回最后一个单元的值
reset 将数组的内部指针指向第一个单元,并返回第一个数组单元的值

这可是很有用的,当我们不知道一个数组的第一个元素下标是什么鬼时,current()的出现避免了我们的尴尬.

结束语

这里分享的都是在我工作学习中的问题,也是极有可能面试到的哦,这个是(一),我会在后面的工作学习中碰到问题及时分享的~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; ...
    朱森阅读 3,531评论 3 44
  • 一、php可以做什么 php是一种可以在服务器端运行的编程语言,可以运行在Web服务器端。 php是一门后台编程语...
    空谷悠阅读 3,182评论 4 97
  • 看过有一篇报道表扬成功率100%的排爆专家 是难得成功率百分的英雄 受人尊重 很了不起 但是同时还有谁会想起这个数...
    03acdfd3c5d7阅读 534评论 0 0
  • 1. 如果任其自然,那些懒惰的孩子往往会一事无成。(leave) 我:If left the children a...
    简单1909阅读 1,099评论 1 2