PHP が WEB 処方において最も人気のあるテクノロジーの 1 つになったことは疑いの余地がありません。 nexen.net の調査によると、インターネット上の Web サイトの 3 分の 1 がサーバーサイド プログラムの開発に PHP を選択しています。ヨーロッパ、アメリカ、日本などの国々では、PHP 開発市場が活況を呈しており、Facebook、Yahoo!、Flickr、Sourceforge などの有名な PHP サイトが無数に存在します。近年、国内の大手Webサイトでは徐々にPHPが多量に使用されるようになりました。
活発でよく組織された開発コミュニティに依存して、PHP 言語自体は着実に進歩しています。一方では、パフォーマンスと安定性が向上し続け、他方では、さまざまな実用的な開発ツールが追加されています。他のプログラミング言語の利点を活用して言語機能を強化します。今日の PHP は、シンプルで学習しやすい構文 (C など) を維持しながら、強力なオブジェクト指向開発 (Java など) をサポートできます。同時に、PHP には非常に多様な実用的な関数、拡張機能、およびクラスもあります。 WEB開発にとても便利なライブラリです。さらに、オブジェクト指向開発が徐々に普及するにつれて、さまざまなオープンソースの PHP クラス ライブラリや開発フレームワークが際限なく登場します。
2009 年 6 月末、PHP は PHP5.3.0 を正式にリリースしました。これは、多くのバグ (140 以上) が修正され、PHP プログラマーが待ち望んでいた多くの新機能をもたらすため、珍しい PHP バージョンです。これらの機能の一部は当初 PHP6 でリリースされる予定でしたが、需要が高かったため、事前に PHP5.3 でリリースされました。
PHP5.3 の優れた点を見てみましょう。
1. PHP 5.3 で非推奨となった機能と関数
PHP 5.3.0 では、E_DEPRECATED と E_USER_DEPRECATED という 2 つの新しいエラー レベルが追加されています。エラー レベル E_DEPRECATED は、関数が非推奨であることを示すために使用されます。E_USER_DEPRECATED レベルの目的は、同様に、ユーザー コードで非推奨の機能であることを示すことです。 E_USER_ERROR および E_USER_WARNING レベル
以下は、非推奨の INI ディレクティブのリストです。次のディレクティブのいずれかを使用すると、
エラーが発生します。
define_syslog_variables register_globals register_long_arrays safe_mode magic_quotes_gpc magic_quotes_runtime magic_quotes_sybase
非推奨の関数:
call_user_method() (使用 call_user_func() 替代) call_user_method_array() (使用 call_user_func_array() 替代) define_syslog_variables() dl() ereg() (使用 preg_match() 替代) ereg_replace() (使用 preg_replace() 替代) eregi() (使用 preg_match() 配合 'i' 修正符替代) eregi_replace() (使用 preg_replace() 配合 'i' 修正符替代) set_magic_quotes_runtime() 以及它的别名函数 magic_quotes_runtime() session_register() (使用 $_SESSION 超全部变量替代) session_unregister() (使用 $_SESSION 超全部变量替代) session_is_registered() (使用 $_SESSION 超全部变量替代) set_socket_blocking() (使用 stream_set_blocking() 替代) split() (使用 preg_split() 替代) spliti() (使用 preg_split() 配合 'i' 修正符替代) sql_regcase() mysql_db_query() (使用 mysql_select_db() 和 mysql_query() 替代) mysql_escape_string() (使用 mysql_real_escape_string() 替代) 废弃以字符串传递区域设置名称. 使用 LC_* 系列常量替代. mktime() 的 is_dst 参数. 使用新的时区处理函数替代.
2. PHP 5.3 の新機能
1. 支持命名空间 (Namespace) 2. 支持延迟静态绑定(Late Static Binding) 3. 支持goto语句 4. 支持闭包、Lambda/Anonymous函数 5. 新增两个魔术方法__callStatic()和__invoke() 6. 新增Nowdoc语法 7. 在类外也可使用const来定义常量 8. 三元运算符增加了一个快捷书写方式: 9. HTTP状态码在200-399范围内均被认为访问成功 10.支持动态调用静态方法 11.新增__DIR__魔术变量
1. 名前空間 (ネームスペース) をサポート
ネームスペースが PHP5.3 によってもたらされる最も重要な新機能であることは疑いの余地がありません。名前空間の概念を利用すると、大規模なサイトを開発する際に、異なるパッケージ内のクラス名や変数名の競合を避けながら、柔軟な構造を設計することが容易になります。
PHP5.3 より前では、パッケージを分割する従来の方法は、ディレクトリ名でコード ファイルを分割し、コード内のクラス名はディレクトリを表すためにアンダースコア _ を使用することでした。たとえば
PHP コード
<?php class Zend_Db_Table_Select {} // 表示当前这个类的文件位于Zend/Db/Table/Select目录下 ?>
この命名方法は、PEAR、Zend Framework、およびさまざまな PHP プロジェクトで広く使用されています。この方法では、異なるパッケージまたはライブラリ内のクラス名の競合を回避できますが、コードを記述するときは面倒で不器用です。
PHP5.3 では、異なる名前空間を指定するだけで済みます。名前空間の区切り文字はバックスラッシュです。
select.php
PHP コード
<?php namespace ZendDbTable; class Select {} ?>
このようにすることで、他の名前空間に Select という名前のクラスが存在する場合でも、それを呼び出すときにプログラムが競合することはありません。コードの可読性も向上しました。
メソッド
の呼び出し
call.php
PHP コード
<?php //namespace ZendDb; include('select.php'); $s = new ZendDbTableSelect(); $s->test(); ?>
2. 遅延静的バインディングをサポート (Late Static Binding)
PHP5 では、クラス内の self キーワードまたは __CLASS__ を通じて現在のクラスを決定または呼び出すことができます。しかし、これをサブクラスで呼び出すと、結果が親クラスになります。親クラスから継承するときに、静的メンバーがすでにバインドされているためです。 例:
PHP コード
<?php class A { public static function who() { echo __CLASS__; } public static function test() { self::who(); } } class B extends A { public static function who() { echo __CLASS__; } } B::test(); ?>
上記のコードの出力結果は次のとおりです:
これは私たちが期待していたものとは異なります。私たちは当初、サブクラスの対応する結果を取得したいと考えていました。
PHP 5.3.0 では、現在のクラスを参照するための static キーワードが追加され、遅延静的バインディングが実装されます:
PHP コード
<?php class A { public static function who() { echo __CLASS__; } public static function test() { static::who(); // 这里实现了延迟的静态绑定 } } class B extends A { public static function who() { echo __CLASS__; } } B::test(); ?>
上記のコードの出力結果は次のとおりです:
B
3. goto ステートメントをサポート
ほとんどのコンピューター プログラミング言語は、無条件ジャンプ ステートメント goto をサポートしています。プログラムが goto ステートメントを実行すると、goto ステートメント内のラベルで指定されたプログラムの場所にジャンプして実行を継続します。 goto ステートメントはプログラム フローを不明瞭にし、可読性を低下させる可能性がありますが、深くネストされたループや if ステートメントを中断するなど、特定の状況では独自の便利性があります。
PHP コード
<?php goto a; echo 'Foo'; a: echo 'Bar'; for($i=0,$j=50; $i<100; $i++) { while($j--) { if($j==17) goto end; } } echo "i = $i"; end: echo 'j hit 17'; ?>
4.支持闭包、Lambda/Anonymous函数
闭包(Closure)函数和Lambda函数的概念来自于函数编程领域。例如JavaScript 是支持闭包和 lambda 函数的最常见语言之一。
在PHP中,我们也可以通过create_function()在代码运行时创建函数。但有一个问题:创建的函数仅在运行时才被编译,而不与其它代码同时被编译成执行码,因此我们无法使用类似APC这样的执行码缓存来提高代码执行效率。
在PHP5.3中,我们可以使用Lambda/匿名函数来定义一些临时使用(即用即弃型)的函数,以作为array_map()/array_walk()等函数的回调函数。
Php代码
<?php echo preg_replace_callback('~-([a-z])~', function ($match) { return strtoupper($match[1]); }, 'hello-world'); // 输出 helloWorld $greet = function($name) { printf("Hello %srn", $name); }; $greet('World'); $greet('PHP'); //...在某个类中 $callback = function ($quantity, $product) use ($tax, &$total) { $pricePerItem = constant(__CLASS__ . "::PRICE_" . strtoupper($product)); $total += ($pricePerItem * $quantity) * ($tax + 1.0); }; array_walk($products, $callback); ?>
5. 新增两个魔术方法__callStatic()和__invoke()
PHP中原本有一个魔术方法__call(),当代码调用对象的某个不存在的方法时该魔术方法会被自动调用。新增的__callStatic()方法则只用于静态类方法。当尝试调用类中不存在的静态方法时,__callStatic()魔术方法将被自动调用。
Php代码
<?php class MethodTest { public function __call($name, $arguments) { // 参数 $name 大小写敏感 echo "调用对象方法 '$name' " . implode(' -- ', $arguments). "n"; } /** PHP 5.3.0 以上版本中本类方法有效 */ public static function __callStatic($name, $arguments) { // 参数 $name 大小写敏感 echo "调用静态方法 '$name' " . implode(' -- ', $arguments). "n"; } } $obj = new MethodTest; $obj->runTest('通过对象调用'); MethodTest::runTest('静态调用'); // As of PHP 5.3.0 ?>
以上代码执行后输出如下:
调用对象方法'runTest' –- 通过对象调用调用静态方法'runTest' –- 静态调用
以函数形式来调用对象时,__invoke()方法将被自动调用。
Php代码
<?php class Demo{ public function __invoke(){ echo "测试"; } } $demo = new Demo; $demo(); ?>
这样的话,直接用对象名就当函数使用了,调用的是_invoke的方法;
输出
测试
6.新增Nowdoc语法
用法和Heredoc类似,但使用单引号。Heredoc则需要通过使用双引号来声明。
Nowdoc中不会做任何变量解析,非常适合于传递一段PHP代码。
Php代码
<?php // Nowdoc 单引号 PHP 5.3之后支持 $name = 'MyName'; echo <<<'EOT' My name is "$name". EOT; //上面代码输出 My name is "$name". ((其中变量不被解析) // Heredoc不加引号 echo <<<FOOBAR Hello World! FOOBAR; //或者 双引号 PHP 5.3之后支持 echo <<<"FOOBAR" Hello World! FOOBAR; ?>
支持通过Heredoc来初始化静态变量、类成员和类常量。
Php代码
<?php // 静态变量 function foo() { static $bar = <<<LABEL Nothing in here... LABEL; } // 类成员、常量 class foo { const BAR = <<<FOOBAR Constant example FOOBAR; public $baz = <<<FOOBAR Property example FOOBAR; } ?>
7. 在类外也可使用const来定义常量
PHP中定义常量通常是用这种方式:
Php代码
<?php define("CONSTANT", "Hello world."); ?>
并且新增了一种常量定义方式:
Php代码
<?php const CONSTANT = 'Hello World'; ?>
8. 三元运算符增加了一个快捷书写方式
Php代码
?:
原本格式为是(expr1) ? (expr2) : (expr3)
如果expr1结果为True,则返回expr2的结果。
PHP5.3新增一种书写方式,可以省略中间部分,书写为expr1 ?: expr3
如果expr1结果为True,则返回expr1的结果
9. HTTP状态码在200-399范围内均被认为访问成功
10.支持动态调用静态方法
Php代码
<?php class Test{ public static function testgo() { echo "gogo!"; } } $class = 'Test'; $action = 'testgo'; $class::$action(); //输出 "gogo!" ?>
11. 支持嵌套处理异常(Exception)
12. 新的垃圾收集器(GC),并默认启用
结语:
PHP 5.3是一个有很大改进的PHP版本,但它仍然遵循着PHP的设计原则—强大、易用。 PHP5.3一方面在面向对象开发等方面有所加强,使PHP更合适于进行企业应用开发,另一方面也增加了不少实用的语法特性和新扩展。我们期待着它能够早日稳定,成为WEB开发中的又一个利器。

セッション固定攻撃を防ぐための効果的な方法には、次のものがあります。1。ユーザーがログインした後にセッションIDを再生します。 2。安全なセッションID生成アルゴリズムを使用します。 3。セッションタイムアウトメカニズムを実装します。 4。HTTPSを使用したセッションデータを暗号化します。これらの措置は、セッションの固定攻撃に直面するときにアプリケーションが破壊されないようにすることができます。

セッションのない認証の実装は、サーバー側のセッションストレージなしですべての必要な情報がトークンに保存されるトークンベースの認証システムであるJSonWebtokens(JWT)を使用することで実現できます。 1)JWTを使用してトークンを生成および検証する、2)トークンが傍受されるのを防ぐためにHTTPSが使用されることを確認する、3)クライアント側にトークンを安全に保存する、4)改ざんを防ぐためにサーバー側のトークンを検証する、5)短期アクセスや長期的なリフレイを使用するなどのトークンの取り消しメカニズムを実装する。

PHPセッションのセキュリティリスクには、主にセッションハイジャック、セッションの固定、セッション予測、およびセッション中毒が含まれます。 1。HTTPSを使用してCookieを保護することにより、セッションハイジャックを防ぐことができます。 2。ユーザーがログインする前にセッションIDを再生することにより、セッションの固定を回避できます。3。セッションの予測は、セッションIDのランダム性と予測不可能性を確保する必要があります。 4.セッションの中毒は、セッションデータを確認およびフィルタリングすることで防ぐことができます。

PHPセッションを破壊するには、最初にセッションを開始してから、データをクリアしてセッションファイルを破壊する必要があります。 1。Session_start()を使用してセッションを開始します。 2。Session_unset()を使用して、セッションデータをクリアします。 3.最後に、session_destroy()を使用してセッションファイルを破壊して、データのセキュリティとリソースのリリースを確保します。

PHPのデフォルトセッションの保存パスを変更する方法は?次の手順で達成できます。Session_save_path( '/var/www/sessions'); session_start(); PHPスクリプトで、セッション保存パスを設定します。 session.save_path = "/var/www/sessions"をphp.iniファイルに設定して、セッションの保存パスをグローバルに変更します。 memcachedまたはredisを使用して、ini_set( 'session.save_handler'、 'memcached')などのセッションデータを保存します。 ini_set(

tomodifydatainaphpsession、starthessession withsession_start()、$ _sessiontoset、modify、orremovevariables.1)startthessession.2)

配列はPHPセッションに保存できます。 1。セッションを開始し、session_start()を使用します。 2。配列を作成し、$ _Sessionで保存します。 3. $ _Sessionを介して配列を取得します。 4.セッションデータを最適化してパフォーマンスを向上させます。

PHPセッションガベージコレクションは、有効期限が切れたセッションデータをクリーンアップするために確率メカニズムを通じてトリガーされます。 1)構成ファイルにトリガー確率とセッションのライフサイクルを設定します。 2)Cronタスクを使用して、高負荷アプリケーションを最適化できます。 3)データの損失を避けるために、ごみ収集の頻度とパフォーマンスのバランスを取る必要があります。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

メモ帳++7.3.1
使いやすく無料のコードエディター

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

ホットトピック









