検索
ホームページバックエンド開発PHPチュートリアルPHP コードの品質を向上させる方法

PHP コードの品質を向上させる方法

Mar 08, 2018 pm 02:27 PM
php方法品質

もちろん、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 tag

index.php

<?phpclass super_class{    function super_function()
    {        //super code
    }
}?>//super extra character after the closing tag

このようにすると、「スーパー余分な文字」が出力されているためです。デバッグ中。スーパー エクストラの場所を見つけるのに時間がかかります。

そのため、終わりの文字を省略する習慣を付けてください:

require_once(&#39;super_class.php&#39;);//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=&#39;header&#39;>Site Log and Login links</p>";
}function print_footer(){    echo "<p id=&#39;footer&#39;>Site was made by me</p>";
}

print_header();for($i = 0 ; $i < 100; $i++)
{    echo "I is : $i <br />&#39;;
}
print_footer();

出力バッファリングが必要な理由:

>>str_replaces 関数または preg_replaces または add など、出力を変更できます。 HTML コンテンツの監視/デバッグ

>> ブラウザへの出力と php での処理を同時に行うと、一部のサイトのサイドバーまたは中央にエラー メッセージが表示されるのを見たことがありますか。なぜそれが起こるか知っていますか? 処理と出力が混在しているためです。

非 HTML コンテンツを出力する場合は、正しい MIME タイプのヘッダー情報を送信します。

function print_header(){
    $o = "<p id=&#39;header&#39;>Site Log and Login links</p>";    return $o;
}function print_footer(){
    $o = "<p id=&#39;footer&#39;>Site was made by me</p>";    return $o;
}echo print_header();for($i = 0 ; $i < 100; $i++)
{    echo "I is : $i <br />&#39;;
}
echo print_footer();

ただし、いくつかの改善が必要です。

ヘッダー行に注意してください。この行は、送信されたコンテンツが XML タイプであることをブラウザーに伝えます。そのため、多くの JavaScript ライブラリーには、JavaScript、CSS、jpg 画像なども含まれます。 png 画像:

JavaScript

$xml = &#39;<?xml version="1.0" encoding="utf-8" standalone="yes"?>&#39;;
$xml = "<response>
  <code>0</code>
</response>";//Send xml dataecho $xml;

CSS

$xml = &#39;<?xml version="1.0" encoding="utf-8" standalone="yes"?>&#39;;
$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 サイトの他の関連記事を参照してください。

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

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

PHP DIコンテナ比較:どちらを選択できますか?PHP DIコンテナ比較:どちらを選択できますか?May 10, 2025 am 12:07 AM

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

PHP依存性注入:何、なぜ、どのように?PHP依存性注入:何、なぜ、どのように?May 10, 2025 am 12:06 AM

依存症(di)inphpisadesignpatternwhereclassdependenciesiesedededed -aittrathertratedinternally、concodemodularityandtestability

PHPでの依存関係:究極のガイドPHPでの依存関係:究極のガイドMay 10, 2025 am 12:06 AM

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

PHPコードの最適化:メモリの使用と実行時間の短縮PHPコードの最適化:メモリの使用と実行時間の短縮May 10, 2025 am 12:04 AM

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

PHPメール:ステップバイステップ送信ガイドPHPメール:ステップバイステップ送信ガイドMay 09, 2025 am 12:14 AM

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

PHP経由で電子メールを送信する方法:例とコードPHP経由で電子メールを送信する方法:例とコードMay 09, 2025 am 12:13 AM

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

高度なPHPメール:カスタムヘッダーと機能高度なPHPメール:カスタムヘッダーと機能May 09, 2025 am 12:13 AM

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

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

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

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

EditPlus 中国語クラック版

EditPlus 中国語クラック版

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

MinGW - Minimalist GNU for Windows

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

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境