もちろん、PHP プログラマーとして、私は自分の PHP コードの品質が非常に高いことを願っています。この記事では主に PHP コードの品質を向上させる方法を紹介し、皆様のお役に立てれば幸いです。
1. 相対パスを使用しないでください
よく見られます:
require_once('../../lib/some_class.php');
このメソッドには多くの欠点があります:
最初に指定された php インクルード パスを検索し、次に現在のディレクトリを検索します。パスのチェックが多すぎます。
スクリプトが別のディレクトリのスクリプトに含まれている場合、そのベース ディレクトリは、他のスクリプトが配置されているディレクトリになります。
もう 1 つの問題は、スケジュールされたタスクがスクリプトを実行するときに、その親スクリプトが実行されることです。 directory は作業ディレクトリではない可能性があります。
したがって、絶対パスを使用するのが最良の選択です。
define('ROOT' , '/var/www/project/');require_once(ROOT . '../../lib/some_class.php');//rest of the code
絶対パスを定義しており、その値は / を改善することもできます。 var/www/project も変更される可能性があります。その場合、毎回変更する必要がありますか? いいえ、次のような __FILE__ 定数を使用できます。
//suppose your script is /var/www/project/index.php//Then __FILE__ will always have that full path.define('ROOT' , pathinfo(__FILE__, PATHINFO_DIRNAME));require_once(ROOT . '../../lib/some_class.php');//rest of the code
さて、どのディレクトリに移動しても、外部サーバーの場合、コードは変更せずに正しく実行されます。
2. require、include、include_once、required_once を直接使用しないでください
クラス ライブラリ、ツール ファイル、ヘルパーなど、複数のファイルをスクリプトの先頭に導入できます。
require_once('lib/Database.php');require_once('lib/Mail.php');require_once('helpers/utitlity_functions.php');
のような関数です。これはより柔軟です。例:
function load_class($class_name){ //path to the class file $path = ROOT . '/lib/' . $class_name . '.php'); require_once( $path ); } load_class('Database'); load_class('Mail');
これを拡張すると、コードがより読みやすくなります。将来必要に応じて、次のような関数を追加できます:
function load_class($class_name){ //path to the class file $path = ROOT . '/lib/' . $class_name . '.php'); if(file_exists($path)) { require_once( $path ); } }
その他の操作:
同じファイルの複数のディレクトリを検索
コード内で 1 つずつ変更することなく、クラス ファイルが配置されるディレクトリを簡単に変更できます
同様の関数を使用して、HTML コンテンツなどのファイルをロードできます。
3. アプリケーションのコードのデバッグを継続します
開発環境では、データベース クエリを出力し、問題のある変数値をダンプし、問題が解決されたら、ただし、より良い方法は、コードのデバッグを継続することです。
define('ENVIRONMENT' , 'development');if(! $db->query( $query ) { if(ENVIRONMENT == 'development') { echo "$query failed"; } else { echo "Database error. Please contact administrator"; } }
サーバーでは、次のことができます。
define('ENVIRONMENT' , 'production');if(! $db->query( $query ) { if(ENVIRONMENT == 'development') { echo "$query failed"; } else { echo "Database error. Please contact administrator"; } }
4. クロスプラットフォーム関数を使用してコマンドを実行します。
system、exec、passthru、shell_exec これら 4 つの関数は、システム コマンドの実行に使用できます。それぞれの動作は若干異なります。問題は、共有ホスティングでは、ほとんどの初心者が最初に特定の機能を選択的に無効にする傾向があることです。使用する前に、どの関数が利用可能であるかを毎回確認してください。
より良い解決策は、関数をクロスプラットフォーム関数にカプセル化することです
/** Method to execute a command in the terminal Uses : 1. system 2. passthru 3. exec 4. shell_exec */ function terminal($command) { //system if(function_exists('system')) { ob_start(); system($command , $return_var); $output = ob_get_contents(); ob_end_clean(); } //passthru else if(function_exists('passthru')) { ob_start(); passthru($command , $return_var); $output = ob_get_contents(); ob_end_clean(); } //exec else if(function_exists('exec')) { exec($command , $output , $return_var); $output = implode("\n" , $output); } //shell_exec else if(function_exists('shell_exec')) { $output = shell_exec($command) ; } else { $output = 'Command execution not possible on this system'; $return_var = 1; } return array('output' => $output , 'status' => $return_var); } terminal('ls');
利用可能なシステム関数がある限り、上記の関数はシェル コマンドを実行します。コードの一貫性を維持します
5. 関数を柔軟に記述します
項目のリストを追加する場合は、別の関数を作成する必要がありますか?さまざまなタイプのパラメーターに少し注意すると、より柔軟になります。例:function add_to_cart($item_id , $qty){ $_SESSION['cart']['item_id'] = $qty; } add_to_cart( 'IPHONE3' , 2 );これで、同じ関数でさまざまなタイプの入力パラメーターを処理できるようになり、コードの多くの部分をリファクタリングできます。よりスマートにします 6. php の終了タグを意図的に無視します php に関する提案がこれほどたくさんある理由を知りたいです。
function add_to_cart($item_id , $qty){ if(!is_array($item_id)) { $_SESSION['cart']['item_id'] = $qty; } else { foreach($item_id as $i_id => $qty) { $_SESSION['cart']['i_id'] = $qty; } } } add_to_cart( 'IPHONE3' , 2 ); add_to_cart( array('IPHONE3' => 2 , 'IPAD' => 5) );これでかなりの時間を節約できます。例を見てみましょう:a super_class.php ファイル
<?phpecho "Hello";//Now dont close this tagindex.php
<?phpclass super_class{ function super_function() { //super code } }?>//super extra character after the closing tagこのようにすると、「スーパー余分な文字」が出力されているためです。デバッグ中。スーパー エクストラの場所を見つけるのに時間がかかります。そのため、終わりの文字を省略する習慣を付けてください:
require_once('super_class.php');//echo an image or pdf , or set the cookies or session dataこれにより改善されます。 7. すべての入力をどこかに集めて、一度にブラウザに出力します異なる関数に出力コンテンツがある場合、これは出力バッファリングと呼ばれます:
<?phpclass super_class{ function super_function() { //super code } }//No closing tagまたは、出力をどこかに集中的に保存することもできます。次のように、ob_start と ob_end_clean を使用することもできます:
function print_header(){ echo "<p id='header'>Site Log and Login links</p>"; }function print_footer(){ echo "<p id='footer'>Site was made by me</p>"; } print_header();for($i = 0 ; $i < 100; $i++) { echo "I is : $i <br />'; } print_footer();出力バッファリングが必要な理由:>>str_replaces 関数または preg_replaces または add など、出力を変更できます。 HTML コンテンツの監視/デバッグ >> ブラウザへの出力と php での処理を同時に行うと、一部のサイトのサイドバーまたは中央にエラー メッセージが表示されるのを見たことがありますか。なぜそれが起こるか知っていますか? 処理と出力が混在しているためです。非 HTML コンテンツを出力する場合は、正しい MIME タイプのヘッダー情報を送信します。
function print_header(){ $o = "<p id='header'>Site Log and Login links</p>"; return $o; }function print_footer(){ $o = "<p id='footer'>Site was made by me</p>"; return $o; }echo print_header();for($i = 0 ; $i < 100; $i++) { echo "I is : $i <br />'; } echo print_footer();ただし、いくつかの改善が必要です。
ヘッダー行に注意してください。この行は、送信されたコンテンツが XML タイプであることをブラウザーに伝えます。そのため、多くの JavaScript ライブラリーには、JavaScript、CSS、jpg 画像なども含まれます。 png 画像:
JavaScript
$xml = '<?xml version="1.0" encoding="utf-8" standalone="yes"?>'; $xml = "<response> <code>0</code> </response>";//Send xml dataecho $xml;
CSS
$xml = '<?xml version="1.0" encoding="utf-8" standalone="yes"?>'; $xml = "<response> <code>0</code> </response>";//Send xml dataheader("content-type: text/xml");echo $xml;
以前、mysql テーブルに unicode/utf-8 エンコーディングが設定されており、phpadmin は正しく表示できることに遭遇しましたが、コンテンツを取得してページに出力すると、ここでの問題は、mysql 接続の文字エンコーディングです。
header("content-type: application/x-javascript"); echo "var a = 10";
アプリケーションが複数の言語をサポートする場合は、接続の文字セットを設定するのが最善です。 . htmlentities を使用して正しいエンコーディング オプションを設定します
php5 .4 より前では、文字のデフォルトのエンコーディングは ISO-8859-1 であり、À â などを直接出力できませんでした。
$value = htmlentities($this->value , ENT_QUOTES , CHARSET);
php5.4以后, 默认编码为UTF-8, 这將解决很多问题. 但如果你的应用是多语言的, 仍然要留意编码问题,.
以上がPHP コードの品質を向上させる方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

依存関係に関与(DI)inphpenhancesScodeFlexyandtateabilitybydecouplingessessessessessesses.1)useconstructorinjectiontopassopassopassdepenciesviaConstructors.2)

Pimpleは簡単なプロジェクトに推奨されます。Symfonyの依存関係は、複雑なプロジェクトに推奨されます。 1)Pimpleは、そのシンプルさと柔軟性のため、小さなプロジェクトに適しています。 2)Symfonyの依存関係は、その強力な能力のため、大規模なプロジェクトに適しています。選択するときは、プロジェクトのサイズ、パフォーマンス要件、学習曲線を考慮する必要があります。

依存症(di)inphpisadesignpatternwhereclassdependenciesiesedededed -aittrathertratedinternally、concodemodularityandtestability

依存性指示(di)inphpenhancesscodemodularity、testability、and maintainability.1)itallowseaseSwapping of components、asseeninapaymentgatewayswitch.2)

TooptimizePHPcodeforreducedmemoryusageandexecutiontime,followthesesteps:1)Usereferencesinsteadofcopyinglargedatastructurestoreducememoryconsumption.2)LeveragePHP'sbuilt-infunctionslikearray_mapforfasterexecution.3)Implementcachingmechanisms,suchasAPC

PhpisusedForsedingEmailsDueToitsIttegration withServerMailServicesAndExternalSmtpproviders、自動化とMarketingCampaign.1)SetupYourphpenvironment withebeBironment witheBiserverandphp、保証

メールを送信する最良の方法は、PHPMailerライブラリを使用することです。 1)Mail()関数を使用することはシンプルですが信頼できないため、電子メールがスパムを入力するか、配信できない場合があります。 2)PHPMailerは、より良い制御と信頼性を提供し、HTMLメール、添付ファイル、SMTP認証をサポートします。 3)SMTP設定が正しく構成されていることを確認し、暗号化(StartTLSやSSL/TLSなど)を使用してセキュリティを強化します。 4)大量の電子メールについては、メールキューシステムを使用してパフォーマンスを最適化することを検討してください。

customedersandaddadvancedfeaturesinphpemailentalitylivainability.1)customederadddetadata fortrackingandcategorization.2)htmLemailsallowStingtintintintintintinteractivity.3)添付物質の添付物質の添付


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

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

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

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境
