本篇博客來自博主在php中文網上寫的一篇,移至CSDN作爲記錄。
1.匿名函數
1.1.解釋:
- 匿名函數也叫閉包函數,即不指定函數名;
- 匿名函數不能直接調用,需要先將匿名函數賦值給一個變量,然後由變量來調用;
- 因爲是賦值給一個變量,末尾要加“;”,這也是與普通函數的區別之一。
1.2.優點:
- 因爲匿名,開發者不需要花費心思,去想一個見名知意又簡單名字來表示;
- 只在調用時,臨時創建,用完立即釋放,不像其他函數那樣即便未調用也佔內存空間;
1.3.應用場景:
-
作爲值,參與計算
-
作爲函數回調
-
閉包
1.4.簡單演示:
<?php
// 場景1:作爲值
$sum = function ($a, $b) {
return $a + $b;
};
// 按值調用
echo $sum(66, 99);
echo "<hr>";
// 場景2:作爲 回調用
$arr = [3, 2, 6, 1, 8, 9];
usort($arr, function ($a, $b) {
return $b - $a;
});
echo '<pre>' . print_r($arr, true);
echo '<hr>';
// 場景3:閉包
function demo() {
// 父作用域中的變量
$email = '[email protected]';
// func: 匿名子函數
return function () use ($email) {
return $email;
};
}
echo demo()();
echo '<hr>';
?>
2.命名空間
2.1.解釋:
- 命名空間是一種封裝事物的方法;
- 在程序語言中開闢一段代碼空間,不同空間的對象名相互獨立,互不衝突;
- 第一個命名空間前不能有任何代碼,一般,命名空間定義爲腳本第一行代碼;
- 調用不同空間內類或方法需寫明命名空間;
2.2.作用:
- 避免開發者在項目中定義的類名、函數名或變量出現重複衝突;
- 爲很長的標識符名稱 創建一個別名 ,提高源代碼的可讀性;
2.3.演示:
語法:
<?php
// 寫法一
namespace blue;
class Test
{
// ...
}
// 寫法二
namespace green{
class Test
{
// ...
}
}
?>
簡單使用
在func.php文件中寫入:
<?php
namespace _demo_01;
// 匿名函數與閉包
// 命名函數
function sum($a, $b) {
return $a + $b;
}
?>
在 transfer.php文件中寫入:
<?php
namespace _demo_02; // 命名空間必須是腳本的第一行代碼
// 如果引入同名函數,程序會報錯,
// 解決方法,使用 命名空間
include __DIR__ . './func.php';
// 對象
function sum($a, $b) {
return $a + $b;
}
// \ 表示全局空間
echo namespace\sum(20, 66);
echo '<hr>';
// 訪問另一個空間的函數
echo \_demo_01\sum(88, 99);
echo '<hr>';
?>
3.類與對象
3.1.解釋:
-
對象:一切事物皆對象,對象是用來描述客觀事物的一個實體。
-
類:類是把具有相似特性的對象歸納到一個抽象類中,即一組相同屬性和行爲的對象的集合。
-
類和對象的關係如下:
類是相似對象的統一描述,類就是對象的一個模板;
先有類,再有對象;
類是對象的抽象;
對象是類的實例。
3.2.使用:
- 在php中,通過關鍵字class來創建和聲明一個類(其他語言基本類似),
class Person{
//成員屬性和方法
// 屬性:變量
// 方法:函數
}
- 使用new 關鍵字 實列化 類
$obj = new People();
- 演示:
<?php
// 類的聲明
class People {
// ...成員屬性和方法
// 屬性:變量
public $name = 'alfred';
// 方法:函數
public function sleep() {
echo "{$this->name} is going to sleep...<br/>";
}
}
// 實列化 new
$obj = new People();
var_dump($obj);
echo '<br>';
echo 'name = ' . $obj->name . '<br>';
$obj->sleep();
?>