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()的出现避免了我们的尴尬.

结束语

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,264评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,549评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,389评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,616评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,461评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,351评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,776评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,414评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,722评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,760评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,537评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,381评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,787评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,030评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,304评论 1 252
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,734评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,943评论 2 336

推荐阅读更多精彩内容

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