PHP語法特點(diǎn)和技巧淺析

文/michaelgbw

php的開發(fā)者在程序開發(fā)界一直占有著一席之地,我也是這樣的一個phper,我們今天并不是要說php是什么,我想這大家baidu,google一下,比我講的清楚,這是肯定的。

在面試中,php的語法因?yàn)楹唵我锥?,所以有時(shí)并不做為考察點(diǎn)出現(xiàn),還有,目前就中國整個的php開發(fā)環(huán)境來說,thinkphp,yii,lavarel等框架已經(jīng)是標(biāo)配。我沒事就會問自己,離開框架我們還會開發(fā)嗎,或者說還能正確的開發(fā)嗎,有時(shí)我們也會用php在cli的模式下運(yùn)行,run個什么crontab什么的,這個可是沒有框架給我們用呀。

所以 我們今天不說框架,不說原理(能力也有限),我們來說說原生的技巧。以下內(nèi)容大多數(shù)都是我在學(xué)習(xí),工作中遇到的。我們一起來看~

預(yù)定義常量

PATH_SEPARATOR //路徑分隔符(Windows為分號,類Unix為冒號)
DIRECTORY_SEPARATOR //目錄分隔符
PHP_EOL //當(dāng)前系統(tǒng)的換行符
PHP_VERSION //PHP版本號
PHP_OS //PHP服務(wù)操作系統(tǒng)
PHP_SAPI //用來判斷是使用命令行還是瀏覽器執(zhí)行的,如果 PHP_SAPI=='cli' 表示是在命令行下執(zhí)行
PHP_INT_MAX INT最大值,32位平臺時(shí)值為2147483647
PHP_INT_SIZE INT字長,32位平臺時(shí)值為4(4字節(jié))
M_PI //圓周率值
M_E //自然數(shù)
FILE 所在文件的絕對路徑
LINE 文件中的當(dāng)前行號
DIR 文件所在目錄
FUNCTION 函數(shù)名稱
CLASS 類的名稱
METHOD 類的方法名
NAMESPACE 當(dāng)前命名空間的名稱

可變標(biāo)識符
//可變變量 
$i = 3;
$k = 'i';
echo $$k; //輸出3
//可變函數(shù)
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中,單引號和雙音號都可以定義一段字符串,但區(qū)別是雙引號會默認(rèn)在解析中進(jìn)行處理。而單引號不會。

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

這個語句是正確解析出$user的。但單引號就不行了。但單引號直接display到view中去會更好,因?yàn)樯倭藢咏馕?,更快?br> 還有php的特定寫法

$str = <<<EOT
  字符串內(nèi)容
EOT;

就是三個<和一個名字將一大段字符包裹起來,這個方法是不需要“”的,一般用在中間大量引用html時(shí)。

empty(),isset(),==null,==0問題

為什么我會拋出這個問題呢,因?yàn)槲以?jīng)被他坑過,嗚嗚嗚~

$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開發(fā)中會不會遇到呢,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

這里大家應(yīng)該都明白了的吧,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;
    });
結(jié)果

大家不知道除了js,php中還有閉包吧,但這里的php的閉包就沒有js那般優(yōu)雅了,要引用還要使用use方法,對于一般的閉包上面那個例子應(yīng)該夠用了。

php指針

大家會不會很疑惑,除了C,還有別的小兄弟有指針?

current/pos 返回當(dāng)前被內(nèi)部指針指向的數(shù)組單元的值,并不移動指針。
key 返回?cái)?shù)組中當(dāng)前單元的鍵名,并不移動指針
next 將數(shù)組中的內(nèi)部指針向前移動一位,并返回移動后當(dāng)前單元的值。先移動,再取值。
prev 將數(shù)組的內(nèi)部指針倒回一位,并返回移動后當(dāng)前單元的值先移動,再取值。
end 將數(shù)組的內(nèi)部指針指向最后一個單元,并返回最后一個單元的值
reset 將數(shù)組的內(nèi)部指針指向第一個單元,并返回第一個數(shù)組單元的值

這可是很有用的,當(dāng)我們不知道一個數(shù)組的第一個元素下標(biāo)是什么鬼時(shí),current()的出現(xiàn)避免了我們的尷尬.

結(jié)束語

這里分享的都是在我工作學(xué)習(xí)中的問題,也是極有可能面試到的哦,這個是(一),我會在后面的工作學(xué)習(xí)中碰到問題及時(shí)分享的~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 指針是C語言中廣泛使用的一種數(shù)據(jù)類型。 運(yùn)用指針編程是C語言最主要的風(fēng)格之一。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu); ...
    朱森閱讀 3,615評論 3 44
  • 一、php可以做什么 php是一種可以在服務(wù)器端運(yùn)行的編程語言,可以運(yùn)行在Web服務(wù)器端。 php是一門后臺編程語...
    空谷悠閱讀 3,279評論 4 97
  • 看過有一篇報(bào)道表揚(yáng)成功率100%的排爆專家 是難得成功率百分的英雄 受人尊重 很了不起 但是同時(shí)還有誰會想起這個數(shù)...
    03acdfd3c5d7閱讀 545評論 0 0
  • 1. 如果任其自然,那些懶惰的孩子往往會一事無成。(leave) 我:If left the children a...
    簡單1909閱讀 1,133評論 1 2

友情鏈接更多精彩內(nèi)容