php基礎(chǔ)語法知識(shí)

空閑時(shí)間學(xué)習(xí)學(xué)習(xí)php的知識(shí),長期記錄博客。知識(shí)點(diǎn)比較零散,只是對(duì)感覺有必要注意的知識(shí)點(diǎn)做個(gè)記錄。

  • 雙引號(hào)和單引號(hào)的區(qū)別
    雙引號(hào)會(huì)解析變量,而單引號(hào)不會(huì)解析變量,單引號(hào)中的變量將會(huì)被當(dāng)做字符串處理
  • 較長字符串的處理
    Heretic格式:我們可以使用Heredoc結(jié)構(gòu)形式的方法來解決該問題,首先使用定界符表示字符串(<<<),接著在“<<<“之后提供一個(gè)標(biāo)識(shí)符GOD,然后是字符串,最后以提供的這個(gè)標(biāo)識(shí)符結(jié)束字符串。如:
$string1 = <<<GOD
我有一只小毛驢,我從來也不騎。
有一天我心血來潮,騎著去趕集。
我手里拿著小皮鞭,我心里正得意。
不知怎么嘩啦啦啦啦,我摔了一身泥.
GOD;
echo $string1;
  • NULL
    NULL(NULL):NULL是空類型,對(duì)大小寫不敏感,NULL類型只有一個(gè)取值,表示一個(gè)變量沒有值,當(dāng)被賦值為NULL,或者尚未被賦值,或者被unset(),這三種情況下變量被認(rèn)為為NULL。

  • 常量的定義
    define("PI",3.14);
    判斷常量是否被定義過用defiend()函數(shù)

  • 賦值運(yùn)算符
    =&: =和其他語言一樣。&類似于指針,指向同一個(gè)數(shù)據(jù),公用一塊內(nèi)存,某一個(gè)變量的值發(fā)生變化時(shí),另外一個(gè)值也會(huì)相應(yīng)改變。

  • 比較運(yùn)算符
    === : 全等,$a === $b ,如果a等于b它們的類型也相同,返回true
    <> : 不等, 等同于!= ,值不等時(shí)返回true
    !== :非全等,$a!==$b,當(dāng)a不等于b或者類型不同時(shí),返回true

  • 邏輯運(yùn)算符

邏輯運(yùn)算符.png
  • 字符串連接運(yùn)算符
    "." 并不改變?cè)址?br> ".=" 改變?cè)址?br> $a = $a."呵呵"; 等價(jià)于 a.="呵呵"
  • 錯(cuò)誤控制運(yùn)算符
    PHP中提供了一個(gè)錯(cuò)誤控制運(yùn)算符“@”,對(duì)于一些可能會(huì)在運(yùn)行過程中出錯(cuò)的表達(dá)式時(shí),我們不希望出錯(cuò)的時(shí)候給客戶顯示錯(cuò)誤信息,這樣對(duì)用戶不友好。于是,可以將@放置在一個(gè)PHP表達(dá)式之前,該表達(dá)式可能產(chǎn)生的任何錯(cuò)誤信息都被忽略掉;
    如果激活了track_error(這個(gè)玩意在php.ini中設(shè)置)特性,表達(dá)式所產(chǎn)生的任何錯(cuò)誤信息都被存放在變量$php_errormsg中,此變量在每次出錯(cuò)時(shí)都會(huì)被覆蓋,所以如果想用它的話必須盡早檢查。
    需要注意的是:錯(cuò)誤控制前綴“@”不會(huì)屏蔽解析錯(cuò)誤的信息,不能把它放在函數(shù)或類的定義之前,也不能用于條件結(jié)構(gòu)例如if和foreach等。
  • foreach循環(huán)語句
    常用語遍歷數(shù)組,類似于OC中的 for-in
//不取下標(biāo)的情況
<?php
$students = array(
'2010'=>'令狐沖',
'2011'=>'林平之',
'2012'=>'曲洋',
'2013'=>'任盈盈',
'2014'=>'向問天',
'2015'=>'任我行',
'2016'=>'沖虛',
'2017'=>'方正',
'2018'=>'岳不群',
'2019'=>'寧中則',
);//10個(gè)學(xué)生的學(xué)號(hào)和姓名,用數(shù)組存儲(chǔ)

//使用循環(huán)結(jié)構(gòu)遍歷數(shù)組,獲取學(xué)號(hào)和姓名  

foreach($students as $v){ 
    echo $v;//輸出(打?。┬彰?    echo "<br />";
}
?>
//取下標(biāo)的情況
foreach($students as $key => $v){ 
    echo $key.":".$v;//輸出(打?。W(xué)號(hào):姓名
    echo "<br />";
}
  • 數(shù)組賦值的三中方式
    1)$array[0] = "蘋果";
    2)$arr = array("0"=>"蘋果");
    3)$arr = array("蘋果");
    2和3等價(jià)
  • 類和屬性
    在類中定義的變量稱之為屬性,通常屬性跟數(shù)據(jù)庫中的字段有一定的關(guān)聯(lián),因此也可以稱作“字段”。屬性聲明是由關(guān)鍵字 public,protected 或者 private 開頭,后面跟一個(gè)普通的變量聲明來組成。屬性的變量可以設(shè)置初始化的默認(rèn)值,默認(rèn)值必須是常量。
    訪問控制的關(guān)鍵字代表的意義為:
    public:公開的
    protected:受保護(hù)的
    private:私有的
class Car {
    //定義公共屬性
    public $name = '汽車';

    //定義受保護(hù)的屬性
    protected $corlor = '白色';

    //定義私有屬性
    private $price = '100000';
}

默認(rèn)都為public,外部可以訪問。一般通過->對(duì)象操作符來訪問對(duì)象的屬性或者方法,對(duì)于靜態(tài)屬性則使用::雙冒號(hào)進(jìn)行訪問。當(dāng)在類成員方法內(nèi)部調(diào)用的時(shí)候,可以使用$this(類似于OC的self)偽變量調(diào)用當(dāng)前對(duì)象的屬性。

$car = new Car();
echo $car->name;   //調(diào)用對(duì)象的屬性
echo $car->color;  //錯(cuò)誤 受保護(hù)的屬性不允許外部調(diào)用
echo $car->price;  //錯(cuò)誤 私有屬性不允許外部調(diào)用

受保護(hù)的屬性與私有屬性不允許外部調(diào)用,在類的成員方法內(nèi)部是可以調(diào)用的。

class Car{
    private $price = '1000';
    public function getPrice() {
        return $this->price; //內(nèi)部訪問私有屬性
?    }
}
  • 定義類的方法
    方法就是在類中的function,很多時(shí)候我們分不清方法與函數(shù)有什么差別,在面向過程的程序設(shè)計(jì)中function叫做函數(shù),在面向?qū)ο笾衒unction則被稱之為方法。
    同屬性一樣,類的方法也具有public,protected 以及 private 的訪問控制。
    訪問控制的關(guān)鍵字代表的意義為:
    public:公開的
    protected:受保護(hù)的
    private:私有的
    我們可以這樣定義方法:
class Car {
    public function getName() {
        return '汽車';
    }
?}
$car = new Car();
echo $car->getName();
  • static靜態(tài)關(guān)鍵字
    使用關(guān)鍵字static修飾的,稱之為靜態(tài)方法,靜態(tài)方法不需要實(shí)例化對(duì)象,可以通過類名直接調(diào)用(類似于OC中的類方法),操作符為雙冒號(hào)::。
class Car {
    public static function getName() {
        return '汽車';
    }
?}
echo Car::getName(); //結(jié)果為“汽車”

靜態(tài)屬性與方法可以在不實(shí)例化類的情況下調(diào)用,直接使用類名::方法名的方式進(jìn)行調(diào)用。靜態(tài)屬性不允許對(duì)象使用->操作符調(diào)用。

class Car {
    private static $speed = 10;
    
    public static function getSpeed() {
        return self::$speed;
    }
}
echo Car::getSpeed();  //調(diào)用靜態(tài)方法

靜態(tài)方法也可以通過變量來進(jìn)行動(dòng)態(tài)調(diào)用

$func = 'getSpeed';
$className = 'Car';
echo $className::$func();  //動(dòng)態(tài)調(diào)用靜態(tài)方法

靜態(tài)方法中,$this偽變量不允許使用。可以使用self,parent,static在內(nèi)部調(diào)用靜態(tài)方法與屬性。

class Car {
    private static $speed = 10;
    
    public static function getSpeed() {
        return self::$speed;
    }
    
    public static function speedUp() {
        return self::$speed+=10;
    }
}
class BigCar extends Car {
    public static function start() {
        parent::speedUp();
    }
}
BigCar::start();
echo BigCar::getSpeed();
  • 對(duì)象繼承
    類的繼承用extends關(guān)鍵字
<?php
class Car {
    public $speed = 0; //汽車的起始速度是0
    
    public function speedUp() {
        $this->speed += 10;
        return $this->speed;
    }
}
//定義繼承于Car的Truck類
class Truck extends Car{
    //重寫speedUp方法
    public function speedUp(){
        $this->speed += 50;
        return $this->speed;
    }
}
$car = new Truck();
$car->speedUp();
echo $car->speed;
  • 重載

  1. php的重載和其他語言中的重載意義不一樣,php中的重載指的是動(dòng)態(tài)的創(chuàng)建屬性與方法,是通過魔術(shù)方法實(shí)現(xiàn)的。屬性的重載通過__set、__get 、__isset 、__unset來分別實(shí)現(xiàn)對(duì)不存在屬性的賦值、讀取、判斷屬性是否設(shè)置、銷毀屬性。
class Car {
    private $ary = array();
    public function __set($key, $val) {
        $this->ary[$key] = $val;
    }
    public function __get($key) {
        if (isset($this->ary[$key])) {
            return $this->ary[$key];
        }
        return null;
    }
    public function __isset($key) {
        if (isset($this->ary[$key])) {
            return true;
        }
        return false;
    }
    public function __unset($key) {
        unset($this->ary[$key]);
    }
}
$car = new Car();
$car->name = '汽車';  //name屬性動(dòng)態(tài)創(chuàng)建并賦值
echo $car->name;

在上面的例子中我們可以看到,本來的Car類中是沒有name屬性的,通過屬性的重載可以動(dòng)態(tài)的創(chuàng)建name屬性并進(jìn)行相應(yīng)操作。

  1. 同理,也可以實(shí)現(xiàn)方法的重載,方法的重載是通過__call來實(shí)現(xiàn)的,當(dāng)調(diào)用不存在的方法的時(shí)候,將會(huì)轉(zhuǎn)為參數(shù)調(diào)用__call方法,當(dāng)調(diào)用不存在的靜態(tài)方法時(shí)會(huì)使用__callStatic重載。
class Car {
    public $speed = 0;
    
    public function __call($name, $args) {
        if ($name == 'speedUp') {
            $this->speed += 10;
        }
    }
}
$car = new Car();
$car->speedUp(); //調(diào)用不存在的方法會(huì)使用重載
echo $car->speed;
  • 字符串操作
  1. 去除字符串的空格
    trim去除一個(gè)字符串兩端空格。
    rtrim是去除一個(gè)字符串右部空格,其中的r是right的縮寫。
    ltrim是去除一個(gè)字符串左部空格,其中的l是left的縮寫。
echo trim(" 空格 ")."<br>";
echo rtrim(" 空格 ")."<br>";
echo ltrim(" 空格 ")."<br>";
  1. 獲取字符串長度
$str = 'hello';
$len = strlen($str);
echo $len;//輸出結(jié)果是5
//中文情況
$str = "我愛你";
echo mb_strlen($str,"UTF8");//結(jié)果:3,此處的UTF8表示中文編碼是UTF8格式,中文一般采用UTF8編碼

3)字符串截取

$str='i love you';
//截取love這幾個(gè)字母
echo substr($str, 2, 4);//為什么開始位置是2呢,因?yàn)閟ubstr函數(shù)計(jì)算字符串位置是從0開始的,也就是0的位置是i,1的位置是空格,l的位置是2。從位置2開始取4個(gè)字符,就是love。
$str='我愛你,中國';
//截取中國兩個(gè)字
echo mb_substr($str, 4, 2, 'utf8');//為什么開始位置是4呢,和上一個(gè)例子一樣,因?yàn)閙b_substr函數(shù)計(jì)算漢字位置是從0開始的,也就是0的位置是我,1的位置是愛,4的位置是中。從位置4開始取2個(gè)漢字,就是中國。中文編碼一般是utf8格式
  1. 字符串查找
$str = 'I want to study at imooc';
$pos = strpos($str, 'imooc');
echo $pos;//結(jié)果顯示19,表示從位置0開始,imooc在第19個(gè)位置開始出現(xiàn)
  1. 字符串替換
$str = 'I want to learn js';
$replace = str_replace('js', 'php', $str);
echo $replace;//結(jié)果顯示I want to learn php
  1. 字符串合并與分割
$arr = array('Hello', 'World!');
$result = implode('', $arr);
print_r($result);//結(jié)果顯示Hello World!
$str = 'apple,banana';
$result = explode(',', $str);
print_r($result);//結(jié)果顯示array('apple','banana')
  1. 字符串的反義
    反義的目的主要是保證數(shù)據(jù)傳輸?shù)陌踩?/li>
$str = "what's your name?";
echo addslashes($str);//輸出:what\'s your name?
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 一、數(shù)組 1、數(shù)組定義 數(shù)組就是一個(gè)鍵值對(duì)組成的語言結(jié)構(gòu),鍵類似于酒店的房間號(hào),值類似于酒店房間里存儲(chǔ)的東西。 $...
    空谷悠閱讀 860評(píng)論 4 11
  • 一、數(shù)組 1、數(shù)組的聲明:$arr = array(); 2、數(shù)組的初始化:PHP有兩種數(shù)組:索引數(shù)組、關(guān)聯(lián)數(shù)組。...
    yzw12138閱讀 1,250評(píng)論 2 2
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,534評(píng)論 19 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,638評(píng)論 18 399
  • 12:中國企業(yè)稅費(fèi)負(fù)擔(dān)在世界上到底處于什么水平?根據(jù)世界銀行的最新調(diào)查,統(tǒng)計(jì)了190個(gè)國家和地區(qū)反映企業(yè)稅費(fèi)負(fù)擔(dān)指...
    金蛛金服閱讀 447評(píng)論 0 1

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