35 votes

PHP mines en général

Ce qui surprend d'autres gens qui se trouvent avec l'écriture d'applications web en PHP? Il y a le bien connu et à correction d'un problème avec la compilation d'héritage de classe, mais je connais un couple d'autres, et je voulais essayer de construire une liste des meilleurs gotcha de la langue.

Note:

J'ai occupé plusieurs postes en tant que Père, PHP5 développeurs PHP le travail paie mes factures, cette question n'est pas destiné à sortir de PHP comme langage, car chaque langue, j'ai travaillé avec a certains bien connus ou pas si bien connu des surprises.

19voto

cg. Points 1946

Je ne sais pas si cela compte, mais la nécessité de compiler des scripts PHP est un énorme problème de performances. Dans tout projet PHP sérieux, vous avez besoin d'une sorte de cache de compilateur comme APC , eAccelerator , PHP Accelerator ou la plate-forme (commerciale) Zend .

15voto

too much php Points 27983

Récursive références de fuite de mémoire

Si vous créez deux objets et de les stocker à l'intérieur des propriétés de chaque d'autres, le garbage collector ne jamais toucher:

$a = new stdClass;
$b = new stdClass;
$a->b = $b;
$b->a = $a;

C'est en fait assez facile à faire quand une grande classe crée un petit objet application qui stocke habituellement la classe principale:

// GC will never clean up any instance of Big.
class Big {
  function __construct() {
    $this->helper = new LittleHelper($this);
  }
}
class LittleHelper {
  function __construct(Big $big) {
    $this->big = $big;
  }
}

Aussi longtemps que le PHP est ciblées à court rapide des demandes de page, ils ne sont pas susceptibles de résoudre ce problème. Cela signifie que PHP ne peut pas être dépendait pour les démons ou d'autres applications qui ont une longue durée de vie.

13voto

David Points 5710

require_once et include_once peut souvent entraîner dans les grandes performances des tueurs lors de l'utilisation excessive. Si votre y compris/besoin d'un fichier qui contient une classe... un modèle comme pouvez enregistrer un peu de sérieux de temps de traitement.

class_exists("myFoo") or require("myFoo.someClass.php");

Mise à jour: C'est encore une question - http://www.techyouruniverse.com/software/php-performance-tip-require-versus-require_once

Mise à jour: Lire la réponse sélectionnée pour la question suivante: http://stackoverflow.com/questions/135373/would-performance-suffer-using-autoload-in-php-and-searching-for-the-class-file Si mis en œuvre le long de ces lignes, vous avez à peu près de minimiser autant que possible les sanctions pour le fichier include/exige.

11voto

Richard Levasseur Points 5428

Une mine amusante: des variables globales peuvent affecter $_SESSION lorsque register_globals est allumé . Mais je suppose que c’est ce qui se passe lorsque register_globals, une mine terrestre, est allumé.

10voto

Robert Gould Points 29406

NULL et la chaîne "0" sont un pur mal en Php

 if ("0" == false) //true
if ("0" == NULL)  //true
if ("0" == "NULL")//true
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X