PHP(三)- 匿名函數、命名空間以及類與對象的學習!

本篇博客來自博主在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.解釋:

  1. 對象:一切事物皆對象,對象是用來描述客觀事物的一個實體。

  2. 類:類是把具有相似特性的對象歸納到一個抽象類中,即一組相同屬性和行爲的對象的集合。

  3. 類和對象的關係如下:
    類是相似對象的統一描述,類就是對象的一個模板;
    先有類,再有對象;
    類是對象的抽象;
    對象是類的實例。

3.2.使用:

  1. 在php中,通過關鍵字class來創建和聲明一個類(其他語言基本類似),
class Person{
    //成員屬性和方法

    // 屬性:變量

   // 方法:函數 

}

  1. 使用new 關鍵字 實列化 類
$obj = new People();
  1. 演示:
<?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();


?>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章