この記事では、PHP 7 で回避する必要がある 10 の落とし穴を紹介します。必要な友人は参照してください
mysql_
関数を使用しないことを提案するプロンプトを表示する必要がなくなりました。 PHP 7 ではそれらがコアから完全に削除されているため、これはより優れた mysqli_
クラス関数、またはより柔軟な PDO レイヤーに移行することを意味します。 2. 無駄なコードを書かないmysql_
函数的提示了。因为 PHP 7 从核心上完全移除了它们,这意味着请你移步至更好的 mysqli_
类函数,或者更灵活的 PDO 层。
这看上去是个无脑建议,但是随着 PHP7 速度的提升掩盖了一些问题使它显得日趋重要。不要仅仅因切到 PHP7 让网站速度变得快点,你就沾沾自喜了。
想理解速度的重要性和如何做的更好,去看看我们这篇文章 初学者加速优化指南。
作为开发者,应该确保按需加载脚本,可能时再组合,编写高效的数据库查询语句,如果可能的话 使用缓存 等等。
如果你随便看看,就会发现大部分 WordPress 核心代码文件结尾都省略了 PHP 闭合标签。事实上,Zend 框架尤为明显地 禁止了闭合标签。它并非 PHP 所必须,在文件结尾处省略它,可确保结尾无额外空白。
我个人非常不喜欢引用传参。我当然知道在某些场合下它很有用,但是多数场合下,它会使得代码难以理解,难以遵循,难以预测结果。
人们认为引用可以使它们的代码更快,不过正如 可敬的 PHP 程序员 的这篇文章所指出的,事实并非如此。
PHP 内置的 shuffle()
或者 sort()
函数,就是糟糕的引用传参案例。 它修改了原数组而不是返回一个打乱的或者排好序的数组,这是完全违背了我们意愿的。
在循环中使用数据库查询时最糟糕的。他会给系统带来不必要的压力,并且很有可能,你可以在循环外使用查询而更快的得到相同的结果。当我碰到必须这样用的场景时,我通常会通过分成两个查询来构造一个数组的方式来解决。然后循环数组而无需循环查询。
由于 WordPress 的运行方式,这样做可能会有些例外。 get_post_meta()
将从数据库获取一个元数据,如果您正在循环访问特定文章的元数据,则可以在循环中使用它。这是因为当你第一次使用它的时候,WordPress 实际上取得了所有的元数据并缓存了起来。 之后的调用实际上是调用缓存数据而不是调用数据库。
解决这些问题的最好办法是阅读函数文档并且使用一些类似 查询监听器 的东西。
好吧,这更像是一个 MySQL 的问题,但我们更倾向于在代码中编写 SQL 语句,所以我说这是个公平的游戏。不管什么情况下,如果你能避免使用通配符,那就不要使用,尤其是当你的数据库有很多字段的时候。
明确指定你需要的字段,并且只检索这些字段。这有助于节省内存,保护数据,并且能让事情变得更加清晰明白。
在 SQL 方面,尽可能的了解你可用的函数并测试速度。 当计算平均数,求和以及计算相似的数字的时候,使用 SQL 内置函数而不是 PHP 的函数。 如果你不确定一个查询的速度快慢,测试一下它并和其他做法进行比较,选出最好的那一种。
信任用户输入并不明智。对于用户输入,总是需要过滤,杀毒,转义,校验以及使用回退。 用户输入存在三个问题:我们开发者不可能考虑到所有可能性,经常出错,存心的恶意输入。
一个经过深思熟虑的系统可以防止所有的这些问题。 在使用数据库时,确保使用内置的函数,如 filter_var()
shuffle()
関数または sort()
関数は、パラメーターの参照渡しの悪い例です。 シャッフルまたはソートされた配列を返すのではなく、元の配列を変更しますが、これは私たちの希望に完全に反します。 🎜🎜5. ループ内でクエリを使用しないでください 🎜🎜 最悪なのは、ループ内でデータベース クエリを使用することです。システムに不必要なストレスがかかりますが、ループの外でクエリを使用すると、同じ結果をより速く得ることができる可能性が高くなります。このように使用しなければならない状況に遭遇した場合、私は通常、クエリを 2 つのクエリに分割して配列を構築することで問題を解決します。次に、クエリをループせずに配列をループします。 🎜🎜WordPress の仕組みにより、これにはいくつかの例外が存在する場合があります。 get_post_meta()
はデータベースからメタデータを取得します。これは、特定の投稿のメタデータをループする場合にループ内で使用できます。これは、WordPress が最初に使用するときに実際にすべてのメタデータを取得し、キャッシュするためです。 後続の呼び出しでは、実際にはデータベースを呼び出すのではなく、キャッシュされたデータを呼び出します。 🎜🎜これらの問題を解決する最善の方法は、関数のドキュメントを読み、クエリ リスナーのようなものを使用することです。 🎜🎜6. SQL クエリでは * を使用しないでください🎜🎜まあ、これは MySQL に関する質問ですが、私たちはコードで SQL ステートメントを記述する傾向があるので、それは公平な問題だと思います。いずれにしても、ワイルドカードの使用を避けられる場合は、特にデータベースに多くのフィールドがある場合は使用しないでください。 🎜🎜必要なフィールドを明示的に指定し、それらのフィールドのみを取得します。これにより、メモリを節約し、データを保護し、内容をより明確にすることができます。 🎜🎜 SQL に関しては、利用可能な関数についてできるだけ詳しく学び、速度をテストしてください。 平均や合計を計算したり、同様の数値を計算したりする場合は、PHP 関数の代わりに SQL 組み込み関数を使用します。 クエリの速度がわからない場合は、クエリをテストし、他のアプローチと比較して、最適なアプローチを選択してください。 🎜🎜7. ユーザー入力を信頼しないでください 🎜🎜 ユーザー入力を信頼するのは賢明ではありません。ユーザー入力の場合、フィルター、サニタイズ、エスケープ、検証、フォールバックの使用が常に必要になります。 ユーザー入力には 3 つの問題があります。それは、私たち開発者がすべての可能性を考慮することは不可能であること、頻繁な間違い、および意図的に悪意のある入力です。 🎜🎜 よく考えられたシステムであれば、これらすべての問題を防ぐことができます。 データベースを使用するときは、filter_var()
などの組み込み関数を必ず使用して、有効性のチェック、エスケープなど、できる限りのことを行ってください。 🎜🎜 WordPress には役立つ機能がたくさんあります。ユーザーデータの検証、エスケープ、サニタイズについて詳しくは、この記事をご覧ください。 🎜🎜8. 賢くならないでください 🎜🎜あなたの目標は、自分の希望を明確に表現するエレガントなコードを書くことです。変数名を短縮したり、マルチレベルの三値論理演算を使用したり、その他のトリックを使用したりすることで、各ページの読み込み時間を 0.01 秒節約できるかもしれませんが、あなたやあなたのチームに頭痛の種や保守の困難を引き起こす結果と比較すると、損失に見合う価値はありません。 🎜変数に適切な名前を付け、コードを簡潔かつ明確に文書化します。インライン コード コメントを大量に使用するよりも、標準化されたオブジェクト指向コーディング スタイルを使用し、それを多かれ少なかれ文書化する方が良いでしょう。
PHP は以前から存在していましたが、Web サイト開発はさらに古くから行われてきました。 あなたがやったことは何でも、誰かが以前にやったことがあるのです。 Github、Composer、Packagist はすべてあなたのメンターです。他の人のサポートに頼ることを恐れないでください。
ロガーからカラー プロセッサー、アナライザーから単体テスト フレームワーク、Mailchimp API から Twitter Bootstrap まで、ボタンをクリックするだけ (またはコマンドを 1 回押すだけ) ですべてができるので、ぜひご利用ください。
PHPer であれば、少なくとも HTML、CSS、JavaScript、MySQL を知っていることが現在では標準的です。 これらの言語をうまく扱えるようになったら、JavaScript をもう一度学習しましょう。 JavaScriptはjQueryではありません。 jQuery を効果的に使用するには、JavaScript を学習する必要があります。
PHP でオブジェクト指向のすべてを学ぶこともお勧めします。これは命の恩人であり、コードを桁違いに改善します。また、C# や Java などの言語への扉も開くことができ、一度使用経験があると、オブジェクト指向プログラミング (OOP) を理解しやすくなります。
パッケージ管理、ビルドスクリプト、Coffeescript、LESS、SASS、YAML、テンプレートエンジン、その他の便利なツールを学習して知識を広げましょう。また、他のフレームワーク、特に Laravel を検討することを心からお勧めします。
これらが十分にできるようになったら、Ruby、Ruby on Rails、Android、iPhone、Windows Phone 用のアプリ開発を検討してみてはいかがでしょうか? これらは自分のコンフォートゾーンや仕事の要件から外れているので無意味だと思うかもしれませんが、まさに重要な点です。 どの言語にも、教育上役立つ知識と無害な追加情報がいくつかあります。トップレベルの PHP 開発者は皆、他のプログラミング言語を知っています。これは偶然ではありません。
関連する推奨事項:
PHP_PHP プログラミングに関する 10 の高度なヒント
以上がPHP 7 で避けるべき 10 の落とし穴の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。