Heim  >  Artikel  >  Backend-Entwicklung  >  Möglichkeiten zur Verbesserung der PHP-Codequalität

Möglichkeiten zur Verbesserung der PHP-Codequalität

小云云
小云云Original
2018-03-08 14:27:121729Durchsuche

Als PHP-Programmierer hoffe ich natürlich, dass die Qualität meines PHP-Codes sehr hoch ist. Dieser Artikel teilt Ihnen hauptsächlich Methoden zur Verbesserung der Qualität von PHP-Code mit und hofft, allen zu helfen.

1. Verwenden Sie keine relativen Pfade

Sie sehen oft:

require_once('../../lib/some_class.php');

Diese Methode weist viele Mängel auf:

Es sucht zuerst nach dem angegebenen PHP-Include-Pfad und dann nach dem aktuellen Verzeichnis

Es werden also zu viele Pfade überprüft

Wenn das Skript von einem Skript eingebunden wird in einem anderen Verzeichnis ist es im Grunde das Verzeichnis, in dem sich ein anderes Skript befindet.

Ein weiteres Problem: Wenn die geplante Aufgabe das Skript ausführt, ist das übergeordnete Verzeichnis möglicherweise nicht das Arbeitsverzeichnis.

Die beste Wahl ist also „Absolute Pfade verwenden“:

define('ROOT' , '/var/www/project/');require_once(ROOT . '../../lib/some_class.php');//rest of the code

Wir haben einen absoluten Pfad definiert und der Wert ist fest codiert. Wir können ihn auch verbessern , also müssen wir es jedes Mal ändern? Nein, wir können die __FILE__-Konstante verwenden, wie zum Beispiel:

//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

Egal in welches Verzeichnis Sie wechseln, z. B. auf einen externen Server , der Code muss nicht korrekt ausgeführt werden.

2. Verwenden Sie „require“, „include“, „include_once“ und „required_once“ nicht direkt.

Sie können mehrere Dateien am Anfang des Skripts einfügen. wie Klassenbibliotheken, Tooldateien und Hilfsfunktionen, wie zum Beispiel:

require_once('lib/Database.php');require_once('lib/Mail.php');require_once('helpers/utitlity_functions.php');

Diese Verwendung ist recht primitiv. Es sollte eine flexiblere Hilfsfunktionsdatei geschrieben werden

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');
Gibt es einen Unterschied? Dieser Code ist zuverlässiger lesbar.

Sie können diese Funktion in Zukunft nach Bedarf erweitern, wie zum Beispiel:

function load_class($class_name){    //path to the class file
    $path = ROOT . '/lib/' . $class_name . '.php');    if(file_exists($path))
    {        require_once( $path );
    }
}
Sie können auch Machen Sie mehr:

Suchen Sie mehrere Verzeichnisse für dieselbe Datei

Sie können das Verzeichnis, in dem Klassendateien abgelegt werden, einfach ändern, ohne den Code einzeln ändern zu müssen.

Sie können ähnliche Funktionen verwenden, um Dateien zu laden, z. B. HTML-Inhalte.

3 Debuggen Sie weiterhin Code für Ihre Anwendung

In der Entwicklungsumgebung drucken wir Datenbankabfragen, geben problematische Variablenwerte aus und Sobald das Problem gelöst ist, kommentieren oder löschen wir sie. Ein besserer Ansatz besteht jedoch darin, den Code weiter zu debuggen.

In der Entwicklungsumgebung können Sie:

define('ENVIRONMENT' , 'development');if(! $db->query( $query )
{    if(ENVIRONMENT == 'development')
    {        echo "$query failed";
    }    else
    {        echo "Database error. Please contact administrator";
    }
}
Auf dem Server Sie können:

define('ENVIRONMENT' , 'production');if(! $db->query( $query )
{    if(ENVIRONMENT == 'development')
    {        echo "$query failed";
    }    else
    {        echo "Database error. Please contact administrator";
    }
}
4. Verwenden Sie plattformübergreifende Funktionsausführungsbefehle

system, exec, passhru, shell_exec. Das Verhalten jedes einzelnen ist Etwas anders. Das Problem besteht darin, dass beim Shared Hosting einige Funktionen selektiv deaktiviert werden können, bevor sie verwendet werden.

Eine bessere Lösung besteht darin, die Funktion zu kapseln eine plattformübergreifende Funktion.

/**
	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');
Die obige Funktion führt den Shell-Befehl aus, solange eine Systemfunktion verfügbar ist, die die Konsistenz des Codes beibehält

5 Schreiben von Funktionen

function add_to_cart($item_id , $qty){
    $_SESSION['cart']['item_id'] = $qty;
}

add_to_cart( 'IPHONE3' , 2 );
Verwenden Sie die obige Funktion, um ein einzelnes Element hinzuzufügen. Und wenn Sie Elemente zur Liste hinzufügen, müssen Sie eine weitere Funktion erstellen, solange Sie ein wenig darauf achten Verschiedene Arten von Parametern machen es flexibler, zum Beispiel:

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) );
Jetzt kann die gleiche Funktion verschiedene Arten von Eingabeparametern verarbeiten. Sie können sich auf das obige Beispiel beziehen, um viele Ihrer Codes umzugestalten um sie intelligenter zu machen.

6. Ignorieren Sie absichtlich das PHP-Schluss-Tag

Ich möchte wirklich wissen, warum so viele Blog-Beiträge über PHP-Ratschläge dies nicht erwähnen.

<?phpecho "Hello";//Now dont close this tag
Das spart Ihnen viel Zeit:

Eine super_class.php-Datei

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

require_once(&#39;super_class.php&#39;);//echo an image or pdf , or set the cookies or session data
In In diesem Fall wird die Fehlermeldung „Header bereits gesendet“ ausgegeben. Jetzt müssen Sie mit dem Debuggen beginnen >

Gewöhnen Sie sich daher an, das Schlusszeichen wegzulassen:

Das wird besser.
<?phpclass super_class{    function super_function()
    {        //super code
    }
}//No closing tag

7. Sammeln Sie alle Eingaben irgendwo und geben Sie sie auf einmal an den Browser aus.

Dies wird als Ausgabepufferung bezeichnet:

Alternativ können Sie die Ausgabe zentral irgendwo speichern oder ob_start und ob_end_clean wie folgt verwenden:
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();

Warum Ausgabepufferung erforderlich ist:
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();

>>Sie können die Ausgabe ändern, bevor Sie sie an den Browser senden, zum Beispiel die Funktion str_replaces oder vielleicht preg_replaces oder einige Überwachungs-/Debugging-HTML-Inhalte hinzufügen.

>>Ausgabe an den Browser und gleichzeitig ist die Verarbeitung von PHP schrecklich. Sie sollten Fehlermeldungen in der Seitenleiste oder in der Mitte sehen. Haben Sie eine Ahnung, warum das passiert?

8 die korrekten MIME-Typ-Header-Informationen, wenn Nicht-HTML-Inhalte ausgegeben werden

Funktioniert gut

$xml = &#39;<?xml version="1.0" encoding="utf-8" standalone="yes"?>&#39;;
$xml = "<response>
  <code>0</code>
</response>";//Send xml dataecho $xml;
Achten Sie auf die Header-Zeile. Diese Zeile teilt dem Browser mit, dass es sich bei den gesendeten Inhalten um XML-Inhalte handelt. Viele Javascript-Bibliotheken sind also auf Header-Informationen angewiesen.

Ähnliche umfassen Javascript und CSS , JPG-Bild, PNG-Bild:
$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;

JavaScript

CSS

header("content-type: application/x-javascript");
echo "var a = 10";
Ich bin einmal darauf gestoßen, dass in der MySQL-Tabelle die Unicode/utf-8-Kodierung festgelegt war. und phpadmin könnte es auch korrekt anzeigen, aber wenn Sie den Inhalt erhalten und auf der Seite ausgeben, werden verstümmelte Zeichen angezeigt. Das Problem liegt hier in der Zeichenkodierung der MySQL-Verbindung Wenn Sie eine Verbindung zur Datenbank herstellen, ist es am besten, den Zeichensatz der Verbindung festzulegen. Wenn Ihre Anwendung mehrere Sprachen unterstützen muss, ist dies ein Muss.

Verwenden Sie htmlentities, um die richtigen Kodierungsoptionen festzulegen
header("content-type: text/css");echo "#p id { background:#000; }";

Vor php5.4 war die Standardkodierung von Zeichen ISO-8859-1, die nicht direkt ausgegeben werden kann, wie z. B. À âetc

$value = htmlentities($this->value , ENT_QUOTES , CHARSET);

php5.4以后, 默认编码为UTF-8, 这將解决很多问题. 但如果你的应用是多语言的, 仍然要留意编码问题,.

Das obige ist der detaillierte Inhalt vonMöglichkeiten zur Verbesserung der PHP-Codequalität. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn