首頁  >  文章  >  後端開發  >  ECshop 遷移到 PHP7版本時遇到的相容性問題

ECshop 遷移到 PHP7版本時遇到的相容性問題

不言
不言原創
2018-06-07 11:23:462600瀏覽

最近有網友問我在php7上安裝ecshopv2.7.3時,報錯,究竟了半天沒有找到原因,下面由腳本之家小編給大家分析此問題出現的原因

在PHP7 上安裝ECShop V2.7.3時,報錯!

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; ECS has a deprecated constructor in /usr/local/nginx/html/ecshop/upload/includes/cls_ecludes/cls_ec. php on line 25

 

這個錯誤的原因是PHP7 不再支援與類別名稱相同的建構方法,建構方法統一使用__construct(), 例如下面的寫法PHP7就會報這個錯誤。

<?php 
class foo { 
function foo() {
echo &#39;I am the constructor&#39;;
}
}
?>

回到 ecshop 我們來看 cls_ecshop.php 檔案的25行。如下

 

果然有與類別名稱相同的建構方法,我們將建構方法ECS 修改為__construct,

 

回到ecshop 的安裝首頁刷新,發現已經沒有錯誤了。

 

點選下一步,報錯

點選下一步,報錯誤

#Deprecated: Non-static method cls_image::gd_version() should not be called statically in /usr /local/nginx/html/ecshop/upload/install/includes/lib_installer.php on line 31

 

這個報錯的原因是靜態呼叫非靜態方法,例如下面的程式碼就會報這個錯誤

<?php 
class foo { 
function bar() {
echo &#39;I am not static!&#39;;
}
}
foo::bar(); 
?>

修改方法也很簡單,要嘛將該方法改為靜態方法,要嘛將該呼叫改為非靜態呼叫。我們來看看報錯的檔案lib_installer.php 的31行程式碼

 

還有cls image類別檔案的gd version() 方法,可以看到的確沒有使用static關鍵字

 

第一種修改方式,將方法修改為靜態方法,在方法前面加關鍵字public static

 

第二種修改方式,採用非靜態方式的調用,修改lib_installer.php 的31行程式碼

 

這兩種方法都可以解決問題。回到ecshop的安裝步驟第二頁,錯誤提示已經不見了。

 

再下一步悲劇了,PHP7 不支援原始的mysql api 了,PHP7 支援更好的Mysqli API 和pdo_mysql api 所以ecshop 不改掉操作mysql的api 是無法在PHP7 上運作起來了。

 

OneAPM for PHP 能夠深入所有PHP 應用程式內部完成應用效能管理能夠深入到所有PHP 應用程式內部完成應用效能管理和監控,包括程式碼層級效能問題的可見性、效能瓶頸的快速識別與追溯、真實使用者體驗監控、伺服器監控和端到端的應用效能管理。

以上所述跟大家分享了ECshop 遷移到 PHP7版本時遇到的相容性問題,希望對大家有幫助。
相關推薦:

PHP上傳找不到臨時資料夾的解決方法

### ############

以上是ECshop 遷移到 PHP7版本時遇到的相容性問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn