PHP 不斷吸納新的程式設計思想新面孔

2021-07-02 16:30:35 字數 2519 閱讀 7533

php 被開發為乙個開源專案,並作為乙個開源專案進行維護,數百(也可能是數千)名貢獻者積極致力於該語言的改進,使之能夠滿足現代 web 開發的需要。php 不斷吸納新的程式設計思想,借用其他程式語言的想法,同時還維持了高水平的向後相容性。這些品質使得 php 目前處於突出的地位:該語言支援著大約 82% 的 web應用,並支援最大的一些**(比如 facebook)。php 是內容管理系統 (cms) 框架背後的核心技術,這些框架包括 wordpress、drupal、magento 和 joomla!(它們的總和佔所有 web 應用的 30%)。

如果您很長一段時間(甚至是過去幾年)沒有看過 php,那麼您可能已經不認識它現在的樣子。本文是由四個部分組成的系列文章的第乙個部分,在本文中,將向您介紹最新版本中新增的最新特性,這些版本包括 php 5.3、5.4 和 5.5。

當然,php 的改變不是憑空發生的,新的語言特性只是 php 整體改進的一部分。php 程式設計師組裝其開發伺服器、管理其第三方庫和解決 web 安全問題的方式也在發生改變。在本系列的後續文章中,將介紹改進 php 生態系統的一些方面。

「我不認為有人偷了任何東西;我們只是借用而已。」

b.b. king

命名空間

關於本系列

php 在活動開源專案的庇護下不斷改進,目前為許多 web 應用提供支援。php 早期是一種模組語言,從那時到現在,php 已經歷了顯著的變化。如果您多年沒有使用過或評估過 php 技術,那麼您很可能幾乎認不出當前的一些 php 專案。本系列文章將向您展示最新的 php 功能,以及如何使用當今的 php 來構建現代化的、安全的**。

命名空間是一項程式設計功能,旨在允許不同庫中的類(和函式)具有相同的名稱。隨著 php 成長成為一種語言,以及**庫的重用變得更加普遍,名稱衝突開始成為乙個主要問題。通過將每個庫細分到它們自己的命名空間,您可以安裝和使用第三方庫(沒有不良後果),該庫包含名稱與您的名稱相匹配的所有類。

在支援建立命名空間之前,庫解決了這個問題:通過在所有類前面加上一致的短語,比如 zend 框架前面附加的 zend_。您可以用深奧的類名稱來結束命名,比如 zend_db_table,而且您還需要在編碼時重複鍵入這樣的字首。在(急需)將 datetime 類新增到 php 5.2 版的核心中時,問題出現了。突然之間,許多開源庫開始崩潰,因為它們建立了名為 datetime 的自己的類來填補這個缺口。

命名空間是通過 namespace 關鍵字建立的,並用反斜槓 (\) 進行分隔。清單 1 顯示了乙個簡單的示例。

清單 1. 簡單的命名空間使用

<?php

namespace zebra;

class datetime

}function stripes()

在 清單 1 中,我定義了自己的命名空間,稱之為 zebra,然後我還在該空間中定義了乙個類和乙個函式。在這種情況下重新定義 datetime 類不會帶來任何問題或錯誤,因為我在命名空間中建立了自己的 datetime 版本。現在,我可以通過引用全名(使用 \ 作為分隔符)來使用命名空間,如清單 2 所示。

清單 2. 使用乙個自定義命名空間

<?php

include 'listing1.php';

// use the stripes function i declared in my namespace:

zebra\stripes();

// use my own datetime class:

$dt = new zebra\datetime();

// now use the 'root' level datetime class:

$real = new \datetime('tomorrow noon');

echo $real->format(\datetime::atom);

在清單 2 的第 2 行上,include 以 namespace 指令開頭的檔案 (listing1.php)。然後,我可以通過使用 zebra\ 作為字首來引用我的類和函式。我還可以使用全域性類,比如原始 datetime,通過附加反斜槓來指示全域性命名空間。

清單 2 中的技術非常方便,但還有乙個方法可以讓**看起來更簡潔:新的 use 關鍵字。這個關鍵字指出,您想要從該命名空間中直接訪問某個特定的類,如清單 3 所示。

清單 3. 使用 use 包含命名空間

<?php

include 'listing1.php';

use zebra\datetime;

// use our own datetime class:

$dt = new datetime();

您還可以使用 use 關鍵字建立別名,這樣您就可以將任何類重新命名為您的範圍內的其他名稱。清單 4 顯示了如何建立乙個別名。

清單 4. 建立乙個別名

<?php

include 'listing1.php';

use zebra\datetime as zdt;

// use our own datetime class:

$dt = new zdt();

您可以使用命名空間做比我這裡介紹的更多的事情,包括建立次級命名空間。您可以深入研究有關的官方文件。

程式設計思想的整理

最近看了一篇大牛寫的招聘記錄及相關感受,裡面說到招聘的一些要求,其中提到了程式設計思想。之前我一直注重擼碼,卻忽略了擼碼過程中的學習。雖然說工作中不會過多的用到相關理論,但個人覺得招聘往後還是會越來越注重理論與實踐的結合。言歸正傳,下面說下我整理的程式設計思想 鏈式程式設計其實就是通過點語法將多個操...

所謂的「程式設計思想」

很多事情,當你把它想得很嚴肅 很莊重,並且當你做這些事情的時候,注定很多遺憾將永遠無法得到填補,程式設計也不例外。很多時候,當乙個人總是很嚴肅 很莊重,並且當他做一些事情的時候,注定很多細節將永遠留下遺憾,當他程式設計的時候也不例外。所以,凡是事情,懷著輕鬆的態度把它做好就夠了。凡是為人,保持愉悅的...

PHP之OOP 程式設計思想從過程到物件!

有乙個人走進商店,他對老闆說 我想要乙個東西,這個東西呢,它是圓形的,是甜甜的,上面有奶油,並且有一些水果在上面,可以插蠟燭.他繁複得敘述的這個什麼東西,究竟是什麼呢?其實我不說大家也猜得到 他想要乙個生日蛋糕。現實生活中,我們不必描述所有一切事物的製作過程,因為有時,我只想要這個事物,並不關心它的...