php7,php74安裝

本文目錄一覽:

Php7有哪些新特性

PHP 7.4 的主要特性包括以下幾個,

短閉包函數(short closure) 預加載提交性能 屬性類型限定 Improved type variance(不會翻譯) 三元運算簡寫 數組展開運算 新增類的魔術方法:serialization 數字分隔符 運算優先順序 允許在__toString中拋出異常 支持反射引用 新增位元組分割函數 移除php短標籤 棄用左關聯運算符 不再向後兼容的變更 短閉包函數

短閉包函數可以減少冗餘代碼:

array_map(function (User $user) {      return $user-id;  }, $users) array_map(fn(User $user) = $user-id, $users)

需要注意幾點:

短閉包可以直接訪問閉包函數外面的變量,所以不需要再寫?use?關鍵詞 以fn關鍵詞開始 $this?可以像普通的閉包一樣使用 短閉包只有一行代碼,僅僅做返回聲明使用,不允許使用return?關鍵詞

還可以使用更嚴格類型的方式

$ids = array_map(fn(User $user): int = $user-id, $user); 預加載

PHP預加載可以極大的提高性能

優點:在PHP 7.4以前,如果你使用了框架來開發,每次請求文件就必須加載和重新編譯。預加載在框架啟動時在內存中加載文件,而且在後續請求中永久有效。

缺點:性能的提升會在其他方面花費很大的代價,每次預加載的文件發生改變時,框架需要重新啟動。

屬性類型限定 class A { public string $name; public Foo $foo; }

不得不說,PHP越來越接近Java等強類型語言

Improved type variance

協變返回類型:

class ParentType {} class ChildType extends ParentType {} class A { public function covariantReturnTypes(): ParentType { /* … */ } } class B extends A { public function covariantReturnTypes(): ChildType { /* … */ } }

依賴(是不是很熟悉):

class ParentType {} class ChildType extends ParentType {} class A { public function covariantReturnTypes(): ParentType { /* … */ } } class B extends A { public function covariantReturnTypes(): ChildType { /* … */ } } 簡寫三元運算符

在目前 PHP 7以後的寫法:

$data[‘date’] = $data[‘date’] ?? new DateTime(); 在PHP 7.4你可以這樣寫: $data[‘date’] ??= new DateTime(); 數組展開運算

合併數組到另一個數組中,返回一維數組

$arrayA = [1, 2, 3]; $arrayB = [4, 5]; $result = [0, …$arrayA, …$arrayB, 6 ,7]; // [0, 1, 2, 3, 4, 5, 6, 7]

注意? :只對數字索引有效

新增類的魔術方法

RFC添加了兩個新的魔術方法__serialize和__unserialize

數字分隔符

允許使用下劃線更直觀的分隔數值

$unformattedNumber = 107925284.88; $formattedNumber = 107_925_284.88; 運算優先順序

PHP 7.4之前,如果你這樣寫:

echo “sum: ” . $a + $b; PHP會解析為: echo (“sum: ” . $a) + $b; PHP 8將會解析為: echo “sum :” . ($a + $b); __toString中拋出異常支持反射引用

PHP 7.4將會新增ReflectionReference?類

移除php短標籤

?將會在PHP 8中移除,?=會繼續保留

棄用左關聯運算符

PHP遺留了一些奇怪的怪癖,比如

1 ? 2 : 3 ? 4 : 5; // 將會在 PHP 7.4 中廢棄,在 PHP 8中會拋出編譯錯誤 (1 ? 2 : 3) ? 4 : 5; // 正確 不再向後兼容的變更 棄用在沒有父類的情況下調用parent:: 調用var_dump打印DateTime和DateTimeImmutableshi』實例,將不再保留對象上的可訪問屬性 openssl_random_pseudo_bytes?會在調用錯誤時拋出異常 序列化PDO和PDOStatement?實例將會生成一個Exception而不是PDOException異常 調用get_object_vars()打印ArrayObject?實例將會返回ArrayObject?自己的屬性,而不是被包裹的數組或對象的值,

數組強制轉換不受影響

PHP7安裝intl擴展和linux安裝icu

一 PHP intl 是國際化擴展,是ICU 庫的一個包裝器。所以在安裝PHP intl擴展前要先安裝ICU庫,安裝ICU庫的具體步驟::

二 安裝intl擴展

1:進入php7.2.5源碼:

2:運行:phpize ,找不到命令時,將路徑補全:/usr/local/php7/bin/phpize(是php的安裝路徑),出現如下:

Configuring for:

PHP Api Version: 20100412

Zend Module Api No: 20100525

Zend Extension Api No: 220100525

3:運行配置

./configure –enable-intl –with-icu-dir=/usr/local/icu/ –with-php-config=/usr/local/php7/bin/php-config

注:前面路徑為icu的安裝路徑,後面路徑為php的安裝路徑。

4:編譯擴展:make

5:複製擴展到目標文件夾

cp /user/local/php/php7.2.5/ext/intl/modules/intl.so /user/local/php7/lib/php/extensions/no-debug-non-zts-20170718

注意:也可以find / -name intl.so 查找。

6:設置擴展加入配置文件中:

[intl]

extension_dir = “/usr/local/php7/lib/php/extensions/no-debug-non-zts-20170718/”

extension=intl.so

大坑:::採用phpinfo()時,無法找到配置的intl擴展,說明配置沒有生效。。。。。。

原因:在編譯php時沒有 –with-config-file-path=PATH 指定php.ini路徑,默認的路徑為/usr/local/php7/lib,只需要將php.ini放入這個默認的路徑即可。你也可以安裝配置php時加入,如下:

./configure –prefix=/usr/local/php7 –with-config-file-path=/usr/local/php7/etc –with-curl –with-freetype-dir –with-gd –with-gettext –with-iconv-dir –with-kerberos –with-libdir=lib64 –with-libxml-dir –with-mysqli –with-openssl –with-pcre-regex –with-pdo-mysql –with-pdo-sqlite –with-pear –with-png-dir –with-xmlrpc –with-xsl –with-zlib –enable-fpm –enable-bcmath -enable-inline-optimization –enable-gd-native-ttf –enable-mbregex –enable-mbstring –enable-opcache –enable-pcntl –enable-shmop –enable-soap –enable-sockets –enable-sysvsem –enable-xml –enable-zip –enable-pcntl –with-curl –with-fpm-user=nginx –enable-ftp –enable-session –enable-xml –with-apxs2=/usr/bin/apxs

訪問:index.php中phpinfo()文件。

PHP7連接mysql數據庫方法

1、用 mysql_connect 的方法,PHP7會報致命錯誤

$conn= mysql_connect(‘localhost’,’xueyanxiang’,’xueyanxiang’);

Fatal error : Uncaught Error: Call to undefined function mysql_connect() in /Users/xueyanxiang/work/test/xue.php:31 Stack trace: #0 /Users/xueyanxiang/work/test/xue.php(119): xue-run() #1 {main} thrown in  /Users/xueyanxiang/work/test/xue.php  on line  31

原因是:

PHP5中使用mysql_connect()函數進行連接,但實際上,PHP5.5開始,MySQL就不推薦使用了,屬於廢棄函數

PHP7中貌似已經徹底不支持了,根據官網說明,取而代之的是如下兩個:

本擴展自 PHP 5.5.0 起已廢棄,並在將來會被移除。應使用 MySQLi 或 PDO_MySQL 擴展來替換之。參見 MySQL:選擇

API 指南以及相關 FAQ 以獲取更多信息。用以替代本函數的有:

mysqli_connect()

PDO::__construct()

使用時,不要在使用mysql_connect了,可以換用mysqli_connect(),用法基本類似吧,據說是面向對象的庫。

php.ini中,也只有extension=php_mysqli.dll,而不再有extension=php_mysql.dll這個拓展了。

2、可以使用mysqli,對象化,方法名與被廢棄的類似

$conn= mysqli_connect(‘localhost’,’xueyanxiang’,’xueyanxiang’);

3、PDO工具,推薦使用

$dbh= “mysql:host=localhost;dbname=test”;

$db= new PDO($dbh,’xueyanxiang’,’xueyanxiang’);

$objQuery= $db-query(“select * from user;”);

$res= $objQuery-fetchAll(PDO::FETCH_ASSOC);

不填寫參數的話,默認是關聯和索引都有,如下圖

鳥哥:讓php7達到最高性能的幾個tips

1. Opcache

記得啟用Zend Opcache, 因為PHP7即使不啟用Opcache速度也比PHP-5.6啟用了Opcache快, 所以之前測試時期就發生了有人一直沒有啟用Opcache的事情. 啟用Opcache非常簡單, 在php.ini配置文件中加入:

zend_extension=opcache.so

opcache.enable=1

opcache.enable_cli=1″

2. 使用新的編譯器

使用新一點的編譯器, 推薦GCC 4.8以上, 因為只有GCC 4.8以上PHP才會開啟Global Register for opline and execute_data支持, 這個會帶來5%左右的性能提升(Wordpres的QPS角度衡量)

其實GCC 4.8以前的版本也支持, 但是我們發現它支持的有Bug, 所以必須是4.8以上的版本才會開啟這個特性.

3. HugePage

前面文章介紹過

4. Opcache file cache

開啟Opcache File Cache(實驗性), 通過開啟這個, 我們可以讓Opcache把opcode緩存緩存到外部文件中, 對於一些腳本, 會有很明顯的性能提升.

在php.ini中加入:

opcache.file_cache=/tmp

這樣PHP就會在/tmp目錄下Cache一些Opcode的二進制導出文件, 可以跨PHP生命周期存在.

5. PGO

如果你的PHP是專門為一個項目服務, 比如只是為你的Wordpress, 或者drupal, 或者其他什麼, 那麼你就可以嘗試通過PGO, 來提升PHP, 專門為你的這個項目提高性能.

具體的, 以wordpress 4.1為優化場景.. 首先在編譯PHP的時候首先:

$ make prof-gen

然後用你的項目訓練PHP, 比如對於Wordpress:

$ sapi/cgi/php-cgi -T 100 /home/zk/local/www/htdocs/ wordpress/index.php /dev/null

也就是讓php-cgi跑100遍wordpress的首頁, 從而生成一些在這個過程中的profile信息.

最後:

$ make prof-clean$ make prof-use make install

這個時候你編譯得到的PHP7就是為你的項目量身打造的最高性能的編譯版本.

php7與php5的區別

php5與php7之間的區別:

1、性能提升:PHP7比PHP5.0性能提升了兩倍。

2、以前的許多致命錯誤,現在改成拋出異常。

3、PHP 7.0比PHP5.0移除了一些老的不在支持的SAPI(服務器端應用編程端口)和擴展。

4、PHP 7.0比PHP5.0新增了空接合操作符。

5、PHP 7.0比PHP5.0新增加了結合比較運算符。

6、PHP 7.0比PHP5.0新增加了函數的返回類型聲明。

7、PHP 7.0比PHP5.0新增加了標量類型聲明。

8、PHP 7.0比PHP5.0新增加匿名類。

9、錯誤處理和64位支持

原創文章,作者:LCALQ,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/317210.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
LCALQ的頭像LCALQ
上一篇 2025-01-11 16:27
下一篇 2025-01-11 16:27

相關推薦

  • at least one option must be selected

    問題解答:當我們需要用戶在一系列選項中選擇至少一項時,我們需要對用戶進行限制,即「at least one option must be selected」(至少選擇一項)。 一、…

    編程 2025-04-29
  • Python官網中文版:解決你的編程問題

    Python是一種高級編程語言,它可以用於Web開發、科學計算、人工智能等領域。Python官網中文版提供了全面的資源和教程,可以幫助你入門學習和進一步提高編程技能。 一、Pyth…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • 銀行資金管理系統總結

    銀行資金管理系統是銀行日常業務運營的核心支撐系統,主要負責處理銀行的資金流動、結算、清算等業務。本文將從功能特點、技術架構、安全性以及未來發展趨勢等多個方面對銀行資金管理系統進行詳…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • 如何修改mysql的端口號

    本文將介紹如何修改mysql的端口號,方便開發者根據實際需求配置對應端口號。 一、為什麼需要修改mysql端口號 默認情況下,mysql使用的端口號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • 英語年齡用連字符號(Hyphenation for English Age)

    英語年齡通常使用連字符號表示,比如 “five-year-old boy”。本文將從多個方面探討英語年齡的連字符使用問題。 一、英語年齡的表達方式 英語中表…

    編程 2025-04-29
  • Idea新建文件夾沒有java class的解決方法

    如果你在Idea中新建了一個文件夾,卻沒有Java Class,應該如何解決呢?下面從多個方面來進行解答。 一、檢查Idea設置 首先,我們應該檢查Idea的設置是否正確。打開Id…

    編程 2025-04-29
  • 金額選擇性序列化

    本文將從多個方面對金額選擇性序列化進行詳細闡述,包括其定義、使用場景、實現方法等。 一、定義 金額選擇性序列化指根據傳入的金額值,選擇是否進行序列化,以達到減少數據傳輸的目的。在實…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29

發表回復

登錄後才能評論