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 = <<

就是三个<和一个名字将一大段字符包裹起来,这个方法是不需要“”的,一般用在中间大量引用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 "
" . $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 "
".$x; });
PHP语法特点和技巧浅析_第1张图片
结果

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

php指针

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

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

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

结束语

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

你可能感兴趣的:(PHP语法特点和技巧浅析)