ホームページ  >  記事  >  バックエンド開発  >  [PHP] PHP の美しさについての簡単な説明

[PHP] PHP の美しさについての簡単な説明

WBOY
WBOYオリジナル
2016-06-23 13:39:211151ブラウズ

[PHP] PHP の美しさについての簡単な説明


別途投稿、http://blog.1988de.com/?p=1018

--------------------------------------
2012 言語ランキング
1 C 1972
2 java 1995
3 Object-C 1986 4 C++ 1983
5 PHP 1994
6 C# 2000
8 Python 1989
9 Perl 1987

ご存知のとおり、Facebook と Taobao は両方とも P で書かれています初期の頃のHP , PHP は、Baidu、Sina、Tencent の 3 つの主要なインターネット企業で広く使用されています。
中国の大手インターネット企業は基本的に PHP 言語を使用していることがわかっています。タオバオ、Alipay など、JAVA を主に使用している企業でも PHP を使用しています。
(これらは PHP の採用計画からのみ確認できます)


C は 1972 年にベル研究所で生まれ、Java は 1995 年に SUN で生まれました。 1994 年、PHP は Rasmus Lerdorf によって Perl で書かれたウェブサイトのメンテナンスとトラフィック統計のガジェットでした。
1995 年に C で書き直され、PHP1.0 がリリースされました。
1997 年に、2 人のイスラエル人の兄弟、Zeev Suraski と Andi Gutmans が PHP コンパイラを書き直し、1998 年に PHP3 をリリースしました。
2000 年に、Zend Engine 1.0 カーネルに基づく PHP 4 がリリースされました。これまで、PHP はプロセス指向のみでした。
2004 年に PHP 5 がリリースされ、それ以来、PHP はオブジェクト指向の段階に移行し、中国でも前例のない発展を遂げました。
2013 年における PHP の最新バージョンは 5.5.7 で、オンラインでは 5.3.25 を使用していました。名前空間、新しいガベージ コレクション メカニズム、組み込みの php-fpm およびその他の機能をサポートします。
2014 年 10 月 16 日、ユーザーはこのバージョンの PHP 5.6 にアップグレードすることが推奨されました。
2014 年、PHP7 の開発はすべてを破壊するものであると主張され、議題に上りました。

PHP は現在、Zend によってサポートされており、コミュニティによって開発された言語です。現在 Oracle に定着している Java と比較すると、まだ草の根的です。
しかし、近年のオブジェクト指向導入後の PHP の発展は依然として非常に目覚ましいものがあります。


Web 開発において PHP が地位を占めることができるのには理由があるはずです

1. 敷居が低く、すぐに始められる (ただし、どのようなプログラムでも綿密な開発にはコンピューターやソフトウェアなどの専門的な知識システムが必要です)
2. 開発、展開、およびデバッグは非常に便利で高速です (これが、多くの大規模なインターネット企業が PHP を使用する理由の 1 つです)
3. 中小規模の Web サイト開発に非常に適しています (その他の分野)
4、大規模Webシステムの接着剤
5、WebベースのLinuxシステム管理に最適

PHP(PHP:Hypertext Preprocessorの略、中国語名:「PHP:ハイパーテキスト」)プリプロセッサ」) (詳細な紹介については Wikipedia を参照してください)


PHP の美しさ、その美しさは正確には何ですか:
1. シンプルで柔軟な構文

すべてのプログラミング言語は、特定の型を解決するための特定の環境に基づいて生まれます。問題の。
人間の言語の誕生と同じように、個人間の効果的なコミュニケーションを目的として孤立した集団によって形成された特定の言語です。
そして、プログラミング言語は、人間とコンピューター、およびコンピューター間のより効果的なコミュニケーションのために形成された特定の言語です。

つまり、理論上は、他のプログラミング言語でできることはすべて PHP で実現できますが、PHP の強みは WEB 開発です。
(PHPはインターネットの波が来たときにWEB開発に特化して誕生したため)

PHPの普及にはそのシンプルで学びやすい構文が欠かせません つまり、PHPを学ぶ敷居が低くて習得できるということです。すぐに始まりました。
これにより、他の業界の多くの人々が IT 業界への参入を試みるために PHP を選択し、他の言語の開発者が PHP 開発への切り替えを選択するようになりました。
Baidu のような大手インターネット企業は、PHP をゼロからトレーニングするために、専門的な背景を持つ多数の C または Java 開発者を毎年採用しています。 PHP 構文の実現は実際には C に基づいており、Java、Perl、および PHP の独自に開発された構文が混合されています。
率直に言うと、PHP は実際には C で実装され、コンパイルと実行を統合した「大きなプログラム ソフトウェア」です。
シンプルで柔軟な構文ルールにより、PHP は開発、デプロイ、デバッグが非常に便利になります。これが PHP の最大の利点です。

PHP はいつでも作成でき、いつでもテストでき、いつでもオンラインで実行できます。この機能は、静的にコンパイルされた言語に置き換えることはできません。



2. 全能の配列

PHP の配列は、実際には順序付きマップです。マップはキーに値を関連付けるタイプです。 PHP 配列にはインデックス配列と連想配列が含まれます。
そのため、実際の配列、リスト (ベクトル)、ハッシュ テーブル (マッピングの実装)、ディクショナリ、セット、スタック、キューなどとして扱うことができます。
このうち、キーは整数または文字列になります。値は任意の型にすることができます。ここのキーは強制的に変換されます。 (マニュアル参照)
  下面列了两个例子:    <?php    $arr = array();    $arr['$usd'] = '$usd';    $arr['0.5'] = '0.5';    $arr['-1'] = '-1';    $arr['//'] = '//';    $arr['%%'] = '%%';    $arr['??'] = '??';    $arr['**'] = '**';    $arr['呵呵'] = '呵呵';    $arr[8.7] = 8.7; // array(8=>8.7)    print_r($arr);    ?>    <?php    function getArray() {        return array(1, 2, 3);    }    // on PHP 5.4    $secondElement = getArray()[1];    // previously    $tmp = getArray();    $secondElement = $tmp[1];    // or    list(, $secondElement) = getArray();    ?>


さらに、PHP は、分割、結合、追加、検索、削除、ソートなど、非常に豊富な配列関連の操作関数を提供します。

3. 弱い型

参照: http://www.laruence.com/2008/08/22/412.html
弱い型とは、変数 At を宣言するときに PHP が変数の型を厳密に検証しないことを意味します。今回は、保存するデータの型を指定する必要はありません:
 <?php    $var = 1; //int    $var = "laruence"; //string    $var = 1.0002; //float    $var = array(); // array    $var = new StdClass; //object;    ?>
もちろん、PHP の弱い型には長所と短所があります。ここではその長所についてのみ説明します:

PHP のデータ型には 3 つのカテゴリ 8 種類があります:
整数、浮動小数点 double/float、boolean、文字列 (スカラー)
インデックス配列/連想配列、オブジェクト (コンポジット)
リソース、NULL (特殊)

弱い型の最大の利点は開発です ユーザーは開発する必要がありません変数の現在の値が現在必要なものであるかどうかがわかっている限り、変数の型は気にしません。
如,当有程序返回值时,我们的判断可以这样:    <?php    if ($return) { //我们这样就可以判断是否有返回值了        echo 'OK!';    }    ?>    如,值的比较:    <?php    if ($test == 1) { //$test 可以为TRUE、整数1、浮点1.0、字符‘1’    }    ?>
在PHP中,所有的变量都是用一个结构-zval来保存的, 在Zend/zend.h中我们可以看到zval的定义:    typedef struct _zval_struct {        zvalue_value value;        zend_uint refcount;        zend_uchar type;        zend_uchar is_ref;    } zval;    其中zvalue_value是真正保存数据的关键部分,现在到了揭晓谜底的时候了,PHP是如何在ZE的基础上实现弱类型的呢? 因为zvalue_value是个联合体(union),    typedef union _zvalue_value {        long lval;        double dval;        struct {            char *val;            int len;        } str;        HashTable *ht;        zend_object_value obj;    } zvalue_value;
このメカニズムを借用することにより、PHP は弱い型を実装します。これは、ZE の場合、常に同じ型、つまり zval に直面するためです。

4. 関数ライブラリ

PHP を使用したことのある子供たちは、PHP に多数のシステム組み込み関数があることを知っているはずです。また、効率を高めるためには、組み込み関数を可能な限り使用する必要があります。
  <?php    function myrow($id, $data)    {        return "<tr><th>$id</th><td>$data</td></tr>\n";    }    $arr = get_defined_functions();    print_r($arr);    ?>
5. 拡張機能

pecl、pear、composer などの現在の PHP サードパーティ パッケージ管理ツールには、多くの優れたクラス パッケージと拡張機能が含まれています。
言い換えれば、機能モジュールの多くは実際に優れているため、既存のクラス パッケージを直接使用できます。

PECL は、既知のすべての拡張機能およびホスティング機能の PHP 拡張機能のディレクトリ、ダウンロード、開発を提供する PHP 拡張ライブラリです。
PEAR - PHP 拡張機能およびアプリケーション ライブラリ
Composer PHP パッケージ依存関係管理プログラム

上記に加えて、PHP の ZE カーネルは外部拡張インターフェイスを提供します。つまり、C 拡張機能を作成し、それらを PHP 使用に動的にロードできます。
このようにして、特定のパフォーマンスを向上させることができます。
Yaf フレームワークはこの機能に基づいて開発されています。

6. LAMP キーワード

ご存知のとおり、LAMP は Web 開発の黄金の組み合わせであり、現在人気のある LNMP などが含まれています。
なぜこれら 4 つが一緒になるのでしょうか? これには開発の歴史を振り返る必要があります:

このオペレーティング システムのカーネルである Linux は、1991 年 10 月 5 日に Linus Torvalds によって初めてリリースされました。 Linux は、フリー ソフトウェアおよびオープン ソース ソフトウェア開発の最も有名な例でもあります。
Apache は、Apache Software Foundation のオープン ソース Web サーバーです。1996 年 4 月以来、Apache はインターネット上で最も人気のある HTTP サーバーであり、1999 年 5 月には Web サーバーの 57% で実行され、2005 年 7 月にはこれが実行されました。年には、この割合は 69% に上昇しました。
オープンソースのリレーショナル データベース管理システムである MySQL は、何度か Sun に買収されました。2009 年に、Sun は Oracle に買収され、正式に Oracle に定着しました。
PHP、PHP: Hypertext Preprocessor、つまり「PHP: Hypertext Preprocessor」です。これはオープンソースの汎用コンピュータ スクリプト言語であり、特に Web 開発に適しており、HTML に埋め込むことができます。

これら 4 人には、成功したオープンソース ソフトウェアという共通点があります。
オープンソースで無料であり、Linux プラットフォームに基づいて統合およびインストールされているため、さらに重要なことに、LAMP はインターネットの波に完全に適応しており、効率的で高速かつ低コストであるため、LAMP は無敵です。

7. オープンソースとそのコミュニティ

PHP のオープンソースの性質には、zend のリーダーシップの下で、特に PHP5.3 以降、徐々に成熟し、より適応性が高まっています。 . シナリオとニーズ。


PHP の欠点は何ですか?


1. シンプルで柔軟な構文
PHP 構文の単純さと柔軟性は、PHP の弱点でもあります。これが、PHP がある程度大企業に適さない理由の 1 つです。
JAVA の子供用シューズを使用したことがあり、PHP を見ると、PHP は弱すぎると感じるでしょう。そうです、JAVA には成熟したプラットフォーム、フレームワーク、仕様、標準があります。
しかし、著者は、PHP 開発全体が適切に標準化、設計、構造化できれば、Baidu と Sina は PHP 実践の良い例になると考えています。

2、没有多线程,没有RPC

    PHP的语言设计上,没有多线程编程,没有RPC远程调用,但是业界存在很多实现PHP多线程的解决方案。
    curl/socket/YRC

3、不适合大计算量任务、长时间执行的任务
    由于PHP的动态特性,PHP不适合去做常驻进程,和去处理大计算量任务,一是内存溢出问题,二是CPU使用问题
    也就是说,PHP不适合CPU密集型应用程序。
    PHP约定默认超时时间为30S。


综上,我们使用PHP,就是看中PHP在web开发上的随写、随测、随时上线的特性。
更多时候,对于整个系统架构来说,更多的核心是在数据分布式、缓存命中、负载均衡、CDN、业务逻辑、安全这些模块上。
所以,如果可以,就使用PHP吧,实在不行,OK,换强项的语言或解决方案,就这么简单。

对PHP的质疑:

1、PHP真的不适合开发企业级web应用吗?
    架构、架构,适不适合企业级,不是开发语言说了算,而是整个架构设计。
    在合适的地方使用合适的东西,在合理的地方使用能最优势的东西。
    业界很多案例说明,不是我们应该使用哪个开发语言,而是哪个更适合我们的需要。

    百度为什么有大量模块从C迁往PHP?
    淘宝为什么从LAMP架构迁往JAVA?
    新浪微博日均十亿的PV,为什么使用LNMP?

2、PHP真的性能差吗?
    开发语言一定程度上,是不会最先达到性能瓶颈的。具体参照大话PHP之性能

3、PHP真的不适合职业发展吗?
    很多童鞋担心选择了PHP,会不会马上走向职业发展瓶颈,还是那句话,作为开发,语言只是工具。
    这些你真的都懂了吗?PHP的ZE、ZM、COW、设计模式、LB、CDN、LRC、RPC、SOA、分布式、CACHE、Restful、fastcgi、LOC等等

总之,选择她并喜欢她吧,写有灵魂的代码和程序,让世界因此而不同。

//------------------------------------------------------------------------------------

选择的比较语言:Java、.NET、C/C++、PHP、Python、Perl

以上均属于服务器端开发语言,其中Java、.NET、C/C++属于静态编译型语言,PHP、Python、Perl属于动态解释型语言


1、Hello world注:假设你已经配置好了各种语言开发环境[PHP]hello.php<?php echo 'hello world';?>#php hello.php[C]hello.c#include <stdio.h>int main(){        printf("%s\n","hello world");}#gcc hello.c -o hello#./hello[Java]hello.javapublic class HelloWorld{    public static void main(String[] args) {          System.out.println("Hello World!");    }}#javac hello.java#java hello//java 后来出来了JSP,其实是简化了Servlet,来提高Web开发效率[C#]hello.csusing System;// A "Hello World!" program in C#namespace HelloWorld{    class HelloWorld{        public static void Main(string[] args){               Console.WriteLine("HelloWorld");        }    }}# csc Hello.cs# Hello//语法很类似Java,它有着不错的组件对象模型COM的特性,C#继承类用:冒号。//注,C#是一个语言,.net是一个平台,上面支持用C#或者VBdotNet写代码。asp同jsp样,用来写动态网页的。[python]hello.py#!/usr/bin/env pythonprint 'Hello World'  //python 是一种面向对象的脚本语言,语法没有大括号,主要靠缩进实现代码块,有些人认为这样的结果清晰,明了//主要应用于系统管理和Web编程,包括3D游戏开发等[Perl]hello.pl#!/usr/bin/perlprint "Hello, World!\n";//perl 被更多的用于系统管理的脚本语言,用来结合 或者 替代shell作为系统管理的程序语言//perl的优势在于文本处理(强大的正则表达式,PHP就是兼容perl的) 和 数据库处理



------------------------------------------

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。