Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
51CTO.com快譯】JavaScript與PHP,都是目前人氣較高的兩款編程語言。PHP是基于C語言而打造,因此非常適合有C語言基礎的開發者。事實上,兩種語言對于新手程序員來說都是比較容易上手的,而且它們都具備出色的靈活性與可擴展性。
那么,它們到底有何不同?
1.PHP能更輕松地實現定制化目標:
重構與定制化能力是決定編程語言命運的兩大重要因素。PHP是開放源代碼軟件,意味開發者可以根據社區需求進行修改,而非立足單個開發者的需求,也正是它的開源特性使得PHP更為靈活也更加適用。憑借著這一點PHP能獲得很多開發者的支持的原因之一。Comiconverse公司CEO透露稱,“我們更樂于利用PHP開發網站,因為我們能夠輕松做出自己需要的變更。JavaScript雖然也很實用,但開發者能夠利用PHP更輕松地實現定制化目標。”
需要注意的是,PHP在這方面僅僅是略有優勢。JavaScript同樣可以根據實際需求進行重構與定制,只不過在效率上不及PHP。
2.各方面對比:
上手難度:js完全oop相對PHP更容易理解一些,但是文檔不如PHP完善,而且語言更新運營還解析引擎不是一家,沒辦法寫清底層原理。那也是js上手簡單一些,起碼不用搭環境選版本
特性:js是事件驅動的,很靈活但是也很坑,調試起來比較困難(曾經被吭哭),而PHP的特性就比較混亂了,組件很多。雙方特性各有優點,PHP的引用傳遞,js的萬物皆對象。平均水平js贏,整天實力PHP贏。
功能:要說功能強大,很明顯,js暫時還比不上PHP,而且客戶端js被限制了很多,比如跨域,ajax寫入,文件讀取什么的。
開發難度:其實都不難,但是PHP比較依賴文檔還搜索引擎,因為命名問題很難記住,這一點js做的就比較好了,尤其是正則表達式部分。
語義:個人比較看重的一點就是語言的語義性,這一點js的完全對象化占很大的優勢,調用屬性或方法.和[]語義性特別強,而PHP這方面就比較謹慎,限制的比較嚴格。但是js也有一個語義部分很糟糕的部分,就是下面這個
注釋:PHP有相當完善的注釋系統,而且各個IDE支持的非常好,當PHP作為核心驅動的時候代碼提示和注釋非常給力。反觀js大多以編輯器為主,作為驅動也是最近不久,所以注釋方面不如PHP完善。
3.開發大型Web應用中,JavaScript有明顯優勢
兩種語言都能用于開發大型Web應用,但JavaScript在這一領域擁有明顯優勢。如之前所提到,專用服務器能夠更好地托管JavaScript用例,因此其更適合用于大型Web應用開發。
4.PHP是一種更為年輕的語言,因此傳統企業更傾向于選擇JavaScript。
如果是在小型企業工作的開發人員,他們通常會使用PHP。但如果在大型企業或者是傳統企業,那么JavaScript會是系統與項目中的普及度更高的語言。PHP是一種更為年輕的語言,因此傳統企業更傾向于選擇JavaScript,以簡化IT部門內部的管理工作。
同樣需要強調的是,JavaScript是一種認證的付費語言。這意味著大家可以考取JavaScript相關資質認證,而PHP則不行。另外,如果學PHP,最后你還得學javascript,因為現在PHP 只會后端不會前端,很難找到工作。
5.不可一概而論
正如很多程序員所言,我們沒辦法將二者進行簡單比較,因為它們的用途并不一樣。PHP是一種服務器端腳本語言,而JavaScript則是一種面向桌面與服務器端的通用型語言。這意味著程序員能夠利用JavaScript完成更為廣泛的應用目標。
6.總結——應該如何選擇?
選擇哪款語言,取決于您的協作對象以及使用目的。在理想情況下,大家最好能同時掌握兩者。如果非要選擇其一,那么PHP應該能夠憑借著開源特性、更多支持選項以及靈活的可塑性小幅勝出。
當然,這只是我的個人見解。您對此有何看法?請在評論中與我們分享。
原文鏈接:https://dzone.com/articles/javascript-vs-php-whats-the-difference
原文標題:JavaScript vs. PHP: What's the Difference?
原文作者:Carol Jon
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】
者 | Brent
譯者 | 張蘭月
這篇文章不在于解決關于 PHP 的那個永恒話題,而是想讓你了解,PHP 在這些年的進展以及那些值得關注的特性與發展現狀。
之前,有一篇非常流行的博客文章是“PHP:那些糟糕的設計”,第一次讀到這篇博客的時候,我正在一個非常破舊的地方工作,處理著許多 PHP 遺留項目。這篇博客對我觸動很深,我開始思考是否要停止編程,換一份完全不同的工作。文章地址:
https://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/
幸運的是,很快我就換了一份工作,而 PHP 在 5.X 版本之后又有了很多新的改進。今天,我要向那些不再使用 PHP 編程,或者陷入遺留項目的人致敬。
劇透:直到今天,PHP 仍有很多糟糕的東西,例如許多核心功能仍然存在不一致的方法簽名,仍然存在令人混淆的配置設置,仍然會有一些開發者因為知識的缺乏而導致寫的代碼很糟糕等等。
但是,本文我想把目光集中在 PHP 已經改進的地方上面,以及如何寫出更加干凈和易維護的 PHP 代碼。也許你不會改變對 PHP 的看法,但很有可能,你會驚訝于過去幾年 PHP 的進步。
更新:很多人希望我能夠展示一下實際代碼,這是我其中一個業余項目的源代碼,它是用 PHP 和 Laravel 寫的,另外還有一個是我們在辦公室負責維護的上百個 OSS 包的列表。
讓我們先快速回顧一下 PHP 的版本發布周期。現在 PHP 的版本是 7.3,預計 2019 年末將發布 PHP 7.4,7.4 之后的版本將會是 PHP 8.0。
從 5.X 版本之后,PHP 核心團隊一直在努力每年發布一個新版本,并且在過去的 4 年間,這一目標一直完成得很好。
大致來說,每個新版本都會用 2 年時間進行積極地支持,然后用一年進行“安全修補”工作。這樣做的目的是促使 PHP 開發者盡可能保持最新狀態,例如每年都升級比從 5.4 直接跳到 7.0 要簡單得多。
PHP 具體的版本發布情況,可以查看:
https://www.php.net/supported-versions.php
搞清楚 PHP 的發展歷程后,我們來談談大家對 PHP 的常見誤解。
在 5.X 版本時代,PHP 的性能平均而言是最好的。而在 7.0 時代,大部分的 PHP 核心都從零開始重寫了,其性能能夠達到之前的 2-3 倍。口說無憑,幸運的是,有人花了大量時間來測量 PHP 的性能,Kinsta 提供了一個很好的更新列表。
從 7.0 版本以來,PHP 性能就只升不降。PHP web 應用的性能可以和其他語言 web 框架的性能相提并論,甚至更高。具體測試情況可查看:
https://github.com/the-benchmarker/web-frameworks
當然,PHP 框架的性能還無法超越 C 和 Rust,但是要比 Rails 或 Django 好,且能夠和 ExpressJS 相媲美。
在談到框架時,PHP 已經不再只是 WordPress 了。作為職業的 PHP 開發者,我認為,WordPress 無法從任何層面代表當今的生態系統。
總體來說,有 2 個主要的 web 應用框架以及一些相對而言較小的框架,如 Symfony 和 Laravel。除此之后,還有 Zend、Yii、Cake、 Code Igniter 等等。
如果你想了解現代 PHP 開發究竟是什么樣子,那么就需要掌握 Symfony 和 Laravel 中的一個,這 2 個框架都有龐大的生態系統,包含各種包和產品。從管理面板和客戶關系管理系統 (CRM) 到單獨的包,從持續集成 (CI) 到性能監視工具,我們有無數的服務如 web 套接字服務器、隊列管理器、支付集成等等。
但是,這些框架都是為實際開發而設計的。如果你需要純粹的內容管理,WordPress 和 CraftCMS 是理想選擇,而且它們還會不斷優化。
衡量 PHP 生態系統目前狀態的方法是看一看 Packagist,它是 PHP 主要的包倉庫。在過去的時間里,它呈現出了指數式增長的態勢,每天 2500 萬左右的下載量,足以說明 PHP 生態系統已經不再是過去那種弱者了。
Packagist 網站上列出了過去的包和版本數量:
除了應用框架和內容管理系統 (CMS) 以外,我們還發現,在過去幾年,異步框架也崛起了。
異步框架是指用 PHP 或其它語言編寫的框架和服務器,它們能夠讓用戶運行真正異步的 PHP。異步框架的例子包括:Swoole、Amp 和 ReactPHP。
由于我們已經進入異步領域,具有大量 IO 的 web 套接字和應用等東西在 PHP 世界中就變得非常重要。
另外,人們還談到了內部郵件列表,在郵件列表中,PHP 核心開發者討論了 PHP 語言的進一步發展,例如增加 libuv 到核心之中。對于不熟悉 libuv 的人來說,libuv 同 Node.js 用于實現其所有異步性的庫一模一樣。
盡管異步 (async) 和等待 (await) 還未面市,但 PHP 在過去幾年已經經過了許多改進,下面便是 PHP 新特性的不完全列表:
盡管我們的主題是 PHP 的語言特性,但我還是覺得需要談一下 PHP 語言的開發流程。雖然社區被允許提出 RFC,但仍有一個活躍的志愿者核心團隊在推動 PHP 的發展。在添加一個新的語言特性之前,必須要進行投票。只有獲得 2/3 多數選票的 RFC 才能被添加到核心中。
大約有 100 個人可以投票,但你不需要給每個 RFC 投票。核心團隊的成員毋庸置疑能夠投票,因為他們必須維護代碼庫。除了他們以外,還有一群人是單獨從 PHP 社區中挑選出來的,這些人員包括 PHP 文件的維護人員,PHP 整體項目的貢獻者,以及 PHP 社區中頗具威望的開發者。
雖然大多數核心開發是由志愿者組成的,但其中一名核心 PHP 開發者 Nikita Popov 近期被 JetBrains 雇傭,并全職負責該語言的開發。另外一個例子是 Linux 基金會決定投資 Zend 框架。上述這些雇傭和收購行為確保了未來 PHP 開發的穩定性。
除了核心本身,我們還目睹了過去幾年間工具的增長。首先進入我腦海的是靜態分析器如 Vimeo 發明的 Psalm,以及 Phan 和 PHPStan。
這些工具能夠靜態分析 PHP 代碼,并且報告打字錯誤、可能的 bug 等等。在某些方面,它們提供的功能足以和 TypeScript 相媲美,但目前 PHP 還沒有被轉編譯 (transpile),因此它并不支持定制句法。
雖然這意味著我們必須依賴于文檔塊,但 PHP 的最初發明者 Rasmus Lerdorf 提出了將靜態分析引擎添加到核心之中的想法。這個想法潛力巨大,但任務量著實不小。
提到轉編譯,由于受到 JavaScript 社區的啟發,有許多人試圖將 PHP 句法延伸到用戶空間中。一個名叫 Pre 的項目就做了這件事情:它支持新的已經轉編譯為普通 PHP 代碼的 PHP 句法。
雖然這一想法已經在 JavaScript 中得以實現,但只有在提供了適當的集成開發環境 (IDE) 和靜態分析支持后,它才能在 PHP 工作。這一想法非常有趣,但還必須不斷完善,才能變成“主流”。
盡管 PHP 還有很多缺點和遺留問題,但我可以充滿信心地說,我喜歡使用它。就我的經驗來看,它可以創建可靠、可維護和高質量的軟件。如果使用得當,PHP 對于 web 開發來說是個非常棒的選擇。
英文原文
https://stitcher.io/blog/php-in-2019
新浪微博是國內使用 PHP 語言的代表之一,前新浪微博首席架構師惠新宸就是 PHP 開發組的核心成員。2016 年,InfoQ 編輯約稿了新浪微博,分享了新浪微博的 PHP 7 升級實踐以及選型思路。文章年代雖然較為久遠了,但背后的思路和實踐細節依舊值得參考,感興趣的同學可以在 InfoQ 公眾號對話框回復關鍵詞:PHP,獲取文章詳情。
請在 InfoQ 公眾號對話框回復關鍵詞,留言區回復無法接收的喲!
QCon 全球軟件開發大會廣州站正在火熱進行中,我們為 InfoQ 的讀者匯總了大會 PPT,回復關鍵詞:PPT,即可下載!
多數PHP程序都使用HTML表單從用戶那里獲取數據并計算結果。
首先創造一個基本的HTML大綱,包含表單控件;然后將控件進行合并(HTML表單必須包括一個提交按鈕,用戶單擊它可以將表單數據發送到服務器。)一個單獨的HTML頁面可以包含多個表單。
包含表單的HTML結構和和普通的HTML結構一樣。
<HTML>
<HEAD>
<TITLE>標題放在這</TITLE>
</HEAD>
<BODY>
表單頁面放在這
</BODY>
</HTML>
在包含表單的HTML頁面中可以使用任何HTML標簽。基本的表單使用FROM標簽來說明。該標簽中METHOD屬性接收GET或POST兩個值中的一個。ACTION屬性子明PHP腳本的url,該腳本可以收集通過表單收集的數據,可以是絕對路徑或者相對路徑。
<FORM METHOD="method" ACTION="url">
中間可以放置表單控件
</FORM>
兩個常用的基本控件:文本框和提交按鈕。
文本框:允許用戶鍵入信息以發送給PHP腳本。NAME屬性為文本提供名稱,PHP腳本可以通過名稱準確訪問其內容,因此它應該是唯一的且符合PHP變量命名規則(但不需要$符號),單標簽。VALUE屬性指明出現在提交按鈕上面的標題。創建方式如下:
<INPUT TYPE = "TEXT" NAME="text">
提交按鈕:允許用戶將一個表單的內容發送到服務器,一個HTML表單對應應該有一個提交按鈕。
示例:一個完整的HTML表單。
<HTML>
<HEAD>
<TITLE>標題</TITLE>
</HEAD>
<BODY>
<FORM METHOD="POST" ACTION="phpinfo.php">
<INPUT TYPE="TEXT" NAME="user_name">
<BR/>
<BR/>
<INPUT TYPE="TEXT" NAME="user_email">
<BR/>
<BR/>
<INPUT TYPE="SUBMIT" VALUE="Send the Data">
</FORM>
</BODY>
</HTML>
可以在一個HTML頁面中包含多個表單,注意下一個表單的FORM開始之前需要結束前一個FORM表單。
<HTML>
<HEAD>
<TITLE>標題</TITLE>
</HEAD>
<BODY>
<FORM METHOD="POST" ACTION="phpinfo.php">
<INPUT TYPE="TEXT" NAME="user_name">
<BR/>
<BR/>
<INPUT TYPE="TEXT" NAME="user_email">
<BR/>
<BR/>
<INPUT TYPE="SUBMIT" VALUE="Send the Data">
<BR/>
<BR/>
</FORM>
<FORM METHOD="POST" NAME="phpinfo.php">
<INPUT TYPE="TEXT" NAME="user_name1">
<BR/>
<BR/>
<INPUT TYPE="TEXT" NAME="user_email1">
<BR/>
<BR/>
<INPUT TYPE="SUBMIT" VALUE="Send the Data1">
</FORM>
</BODY>
</HTML>
文本框的屬性中,TYPE和NAME是必須的,其余是可選屬性。SIZE屬性用于設置文本框的可視大小;MAXLENGTH指明用戶鍵入字符的最大長度;VALUE給出了一個最初顯示在文本框中的值。
<input type="text" name="" size="" maxlength="" value="">
文本區域可以輸入多行文本。NAME和ROWS屬性是必須的。ROWS屬性表明了文本區域內可以看到的文本行數,充滿時會滾動。COLS屬性指明可見文本列數與行數類似。WRAP屬性指明文本區域內單詞換行的方式,可以指定如下值。該標簽為雙標簽。
值 | 說明 |
off | 禁止單詞換行但用戶可以輸入換行符強制換行 |
virtual/soft | 各行顯示為換行,但是換行并沒有被發送到服務器 |
physica/hard | 啟用了單詞換行 |
<inputarea name="" rows="" cols="" wrap="">
創建密碼框的語法與文本框相同,但要將TYPE屬性指定為PASSWORD而不是TYPE。
<input type="password" name="" size="" maxlength="" value="">
取兩個值中的一個,即二選一。TYPE屬性是必須的,checked屬性出現,該復選框默認情況會被選定。value屬性指定復選框被選定情況下被發送到服務器的值,默認發送on值。法如下:
<input type="checkbox" name="" checked value="">
語法與復選框屬性含義相同,但是TYPE屬性的值必須是RADIO,NAME屬性是必須的。
<input type="radio" name="" checked value="">
用戶可以選擇一個或者多個選項,它是一個滾動菜單。
<select name="" multipile size="">options go here</select>
name屬性是必須的,multipile屬性指明用戶可以通過按下crtl鍵并單擊多個選項來選擇它們
列表框的單選行為可作為單選按鈕。
<option selected value="text"></options>
<input type="hidden" name="text"value="">
<input type="FILE" name="name" accept="time" value="text">
其中type屬性是必須的。格式通過使用MIME碼指定。常用的格式如下:
超文本標記語言文本 .html,.html text/html
普通文本 :txt text/plain
word文檔:application/msword
RTF文本 :rtf application/rtf
GIF圖形 :gif image/gif
JPEG圖形 :jpeg,
jpg: image/jpeg
au聲音文件:au audio/basic
MIDI音樂文件 :mid,.midi audio/midi,audio/x-midi
RealAudio音樂文件 .ra, .ram audio/x-pn-realaudio
MPEG文件 .mpg,.mpeg video/mpeg
AVI文件 .avi video/x-msvideo
GZIP文件 .gz application/x-gzip
壓縮文件.rar application/octet-stream
壓縮文件.zip application/x-zip-compressed
TAR文件 .tar application/x-tar
<input type="image" src="url" name="text" align="align">
<input type="reset" value="text">
*請認真填寫需求信息,我們會在24小時內與您取得聯系。