もちろん、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 );
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) );
<?phpecho "Hello";//Now dont close this tag
<?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
<?phpclass super_class{ function super_function() { //super code } }//No closing tag
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();
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;
$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 サイトの他の関連記事を参照してください。