En tant que programmeur PHP, j'espère bien sûr que la qualité de mon code PHP est très élevée. Cet article partage principalement avec vous des méthodes pour améliorer la qualité du code PHP, dans l'espoir d'aider tout le monde.
1. N'utilisez pas de chemins relatifs
Vous voyez souvent :
require_once('../../lib/some_class.php');
Cette méthode présente de nombreux défauts :
Il recherche d'abord le chemin d'inclusion php spécifié, puis recherche le répertoire actuel
Donc, trop de chemins seront vérifiés
Si le script est inclus par un script. dans un autre répertoire, c'est essentiellement Le répertoire devient le répertoire où se trouve un autre script.
Autre problème, lorsque la tâche planifiée exécute le script, son répertoire parent peut ne pas être le répertoire de travail.
Le meilleur choix est donc Utiliser des chemins absolus :
define('ROOT' , '/var/www/project/');require_once(ROOT . '../../lib/some_class.php');//rest of the code
Nous avons défini un chemin absolu et la valeur est codée en dur. Nous pouvons également l'améliorer. Le chemin /var/www/project peut également changer, donc nous devons le faire à chaque fois Le changer ? Non, nous pouvons utiliser la constante __FILE__, comme :
//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
Maintenant, quel que soit le répertoire vers lequel vous vous déplacez, comme le déplacement vers un serveur externe, le code n'a pas besoin d'être modifié. Exécutez correctement.
Vous pouvez introduire plusieurs fichiers en tête du script, tels que comme les bibliothèques de classes, les fichiers d'outils et les fonctions d'assistance, telles que :
require_once('lib/Database.php');require_once('lib/Mail.php');require_once('helpers/utitlity_functions.php');
Cette utilisation est assez primitive. Elle devrait être plus flexible. Un fichier d'inclusion de fonction d'assistance doit être écrit par exemple :
<. 🎜>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 ); } }
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"; } }
/** 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');
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) );
6. Ignorer délibérément la balise de fermeture php
Je veux vraiment savoir pourquoi Tant d'articles de blog sur les conseils php ne le mentionnent pas.
Ceci vous fera gagner beaucoup de temps. Donnons un exemple :<?phpecho "Hello";//Now dont close this tag
Un fichier super_class.php
index.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
<?phpclass super_class{ function super_function() { //super code } }//No closing tag
C'est ce qu'on appelle la mise en mémoire tampon de sortie. Si vous avez du contenu de sortie dans différentes fonctions :
Alternativement, collectez la sortie de manière centralisée quelque part. Vous pouvez la stocker dans une variable locale de la fonction, ou vous pouvez utiliser ob_start et ob_end_clean comme suit :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();
<. 🎜 >>>Vous pouvez modifier la sortie avant de l'envoyer au navigateur. Par exemple, la fonction str_replaces ou peut-être preg_replaces ou ajouter du contenu HTML de surveillance/débogage.
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 = '<?xml version="1.0" encoding="utf-8" standalone="yes"?>'; $xml = "<response> <code>0</code> </response>";//Send xml dataecho $xml;
Les bibliothèques similaires incluent javascript, css. , image jpg, image png :
$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;
CSS
J'ai rencontré une fois que l'encodage unicode/utf-8 était défini dans la table mysql, et phpadmin pourrait également l'afficher correctement, mais lorsque vous obtenez le contenu et l'affichez sur la page, des caractères tronqués apparaîtront ici. Le problème réside dans l'encodage des caractères de la connexion mysqlheader("content-type: application/x-javascript"); echo "var a = 10";
header("content-type: text/css");echo "#p id { background:#000; }";
Utilisez des entités html pour définir les options d'encodage correctes
.//Attempt to connect to database$c = mysqli_connect($this->host , $this->username, $this->password);//Check connection validityif (!$c) { die ("Could not connect to the database host: <br />". mysqli_connect_error()); }//Set the character set of the connectionif(!mysqli_set_charset ( $c , 'UTF8' )) { die('mysqli_set_charset() failed'); }
.
$value = htmlentities($this->value , ENT_QUOTES , CHARSET);
php5.4以后, 默认编码为UTF-8, 这將解决很多问题. 但如果你的应用是多语言的, 仍然要留意编码问题,.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!