Je sais que cela ressemble à une question pointilleuse, mais laissez-moi vous expliquer d'où je viens.
À la sortie de l'université, j'ai trouvé un emploi dans une boutique PHP. J'y ai travaillé pendant un an et demi et j'ai pensé que j'avais appris tout ce qu'il y avait à apprendre sur la programmation.
Ensuite, j'ai trouvé un emploi en tant qu'atelier de développement interne individuel dans une grande entreprise où tout le travail était en C #. Dans mon engagement à ce poste, j'ai commencé à lire une tonne de blogs et de livres et j'ai rapidement réalisé à quel point j'avais tort de penser que je savais tout. J'ai appris sur les tests unitaires, l'injection de dépendances et les modèles de décorateurs, le principe de conception du couplage lâche, la composition sur le débat sur l'héritage, et ainsi de suite et ainsi de suite. Inutile de dire que mon style de programmation a complètement changé l'année dernière.
Maintenant, je me retrouve à ramasser un projet php en train de coder pour la start-up d'un ami et je me sens complètement contraint par opposition à la programmation en C #. Cela me dérange vraiment que toutes les variables d'une portée de classe doivent être référencées en ajoutant «$ this->». Cela me dérange qu'aucun des IDE que j'ai essayés n'a une très bonne intelligence et que mes méthodes de tests unitaires SimpleTest doivent commencer par le mot «test». Cela me rend fou que le typage dynamique m'empêche de spécifier implicitement le type de paramètre qu'une méthode attend, et que vous devez écrire une instruction switch pour effectuer des surcharges de méthode. Je ne supporte pas que vous ne puissiez pas avoir d'espaces de noms imbriqués et que vous deviez utiliser l'opérateur :: pour appeler le constructeur de la classe de base.
Maintenant, je n'ai pas l'intention de lancer un débat PHP vs C #, mais ce que je veux dire, c'est que je suis sûr qu'il y a des fonctionnalités PHP que je ne connais pas ou que je ne connais pas encore utiliser correctement. Je suis installé dans mon univers C # et j'ai du mal à voir à l'extérieur du bol en verre.
Alors je demande, quelles sont vos fonctionnalités préférées de PHP? Que pouvez-vous y faire que vous ne pouvez pas ou qui sont plus difficiles dans les langages .Net?
la source
Réponses:
Documentation . La documentation obtient mon vote. Je n'ai pas rencontré de documentation en ligne plus complète pour un langage de programmation - tout le reste que je dois rassembler à partir de divers sites Web et pages de manuel.
la source
Tableaux . À en juger par les réponses à cette question, je ne pense pas que les gens apprécient pleinement à quel point les tableaux en PHP sont faciles et utiles. Les tableaux PHP agissent en même temps comme des listes, des cartes, des piles et des structures de données génériques. Les tableaux sont implémentés dans le cœur du langage et sont utilisés partout, ce qui se traduit par une bonne localisation du cache du processeur. Perl et Python utilisent tous deux des constructions de langage distinctes pour les listes et les cartes, ce qui entraîne davantage de copies et des transformations potentiellement déroutantes.
la source
[[1, 2], [3, 4]]
, comparer à la version PHP:array(array(1, 2), array(3, 4))
.Les gestionnaires de flux vous permettent d'étendre le "FileSystem" avec une logique qui, pour autant que je sache, est assez difficile à faire dans la plupart des autres langages.
Par exemple, avec le gestionnaire de flux MS-Excel, vous pouvez créer un fichier MS Excel de la manière suivante:
la source
Les méthodes magiques sont des méthodes de secours qui sont appelées chaque fois que vous invoquez une méthode qui n'existe pas ou que vous attribuez ou lisez une propriété qui n'existe pas, entre autres.
Un développeur C ++ ici pourrait remarquer que PHP permet de surcharger certains opérateurs, par exemple
()
ou(string)
. En fait, PHP permet encore plus de surcharger, par exemple l'[]
opérateur ( ArrayAccess ), laforeach
construction du langage ( Iterator et IteratorAggregate ) et lacount
fonction ( Countable ).la source
__call()
est génial dans les frameworks avec la carte domain.com/controller/method/La classe standard est un conteneur soigné. Je ne l'ai appris que récemment.
Au lieu d'utiliser un tableau pour contenir des attributs de serveur
Vous pouvez utiliser une classe standard
Ceci est particulièrement utile lors de l'accès à ces variables dans une chaîne
la source
Les fichiers d'inclusion peuvent avoir une valeur de retour que vous pouvez affecter à une variable.
la source
Vous pouvez profiter du fait que l'
or
opérateur a une priorité plus faible que=
pour faire ceci:Si la valeur de la première affectation est évaluée à
true
, la deuxième affectation est ignorée. Un autre exemple:la source
or
s'exécutera si le code avantor
aboutit à la valeur numérique0
. Donc, sémantiquement, cela peut être moins probable avec quelque chose comme$_GET['page']
, mais évidemment, les circonstances peuvent survenir et il est bon de faire attention.or
opérateur est une version antérieure inférieure de l'||
opérateur. De plus, +1 parce que c'est très expressif et j'oublie souvent que c'est possible. Il devrait être utilisé plus souvent, et ce qu'il fait est absolument clair. Je ne sais pas comment codent les «vrais hommes», donc je ne peux pas faire de commentaire à ce sujet.__autoload()
(classe-) fichiers aidés parset_include_path()
.En PHP5, il est désormais inutile de spécifier de longues listes d'instructions "include_once" lorsque vous faites une POO décente.
Définissez simplement un petit ensemble de répertoires dans lequel les fichiers de bibliothèque de classes sont correctement structurés et définissez le chemin d'inclusion automatique:
Maintenant la
__autoload()
routine:Désormais, PHP inclura automatiquement les fichiers nécessaires à la demande, économisant ainsi le temps d'analyse et la mémoire.
la source
Facilité . La plus grande caractéristique est la facilité avec laquelle les nouveaux développeurs peuvent s'asseoir et écrire des scripts «fonctionnels» et comprendre le code.
La pire caractéristique est la facilité avec laquelle les nouveaux développeurs peuvent s'asseoir et écrire des scripts «fonctionnels» et penser qu'ils comprennent le code.
L' ouverture de la communauté autour de PHP et les quantités massives de projets PHP disponibles en open-source sont beaucoup moins intimidantes pour quelqu'un qui entre dans le monde du développement et comme vous, peuvent être un tremplin vers des langages plus matures.
Je ne discuterai pas des choses techniques comme beaucoup avant moi, mais si vous considérez PHP comme une communauté plutôt qu'un langage Web, une communauté qui vous a clairement embrassé lorsque vous avez commencé à développer, les avantages parlent vraiment d'eux-mêmes.
la source
Variables et fonctions variables sans aucun doute!
Le même concept s'applique aux paramètres d'objet ($ some_object -> $ some_variable);
Très très gentil. Rendez le codage avec des boucles et des modèles très facile, et c'est plus rapide et plus sous contrôle que eval (Thanx @Ross & @Joshi Spawnbrood!).
la source
Vous pouvez utiliser des fonctions avec un nombre d'arguments indéfini à l'aide de
func_get_args()
.la source
J'adore les fichiers distants . Pour le développement Web, ce type de fonctionnalité est extrêmement utile.
Besoin de travailler avec le contenu d'une page Web? Un simple
et vous avez un descripteur de fichier prêt à l'emploi, comme n'importe quel autre fichier normal.
Ou que diriez-vous de lire un fichier distant ou une page Web directement dans une chaîne?
L'utilité de cette méthode particulière est difficile à surestimer.
Vous souhaitez analyser une image distante? Que diriez-vous de le faire via FTP?
Presque toutes les fonctions PHP qui fonctionnent avec des fichiers peuvent fonctionner avec un fichier distant. Vous pouvez même
include()
ou lesrequire()
fichiers de code à distance de cette façon.la source
strtr ()
C'est extrêmement rapide, à tel point que vous seriez surpris. En interne, il utilise probablement une structure de type b-tree folle pour organiser vos correspondances par leurs préfixes communs. Je l'utilise avec plus de 200 chaînes de recherche et de remplacement et il passe toujours par 1 Mo en moins de 100 ms. Pour toutes les chaînes, sauf pour des petites chaînes, strtr () est encore beaucoup plus rapide que strtolower () pour faire exactement la même chose, même en tenant compte du jeu de caractères. Vous pourriez probablement écrire un analyseur entier en utilisant des appels strtr successifs et ce serait plus rapide que la correspondance habituelle des expressions régulières, déterminer le type de jeton, générer tel ou tel autre type d'expression régulière.
J'écrivais un normalisateur de texte pour diviser le texte en mots, en minuscules, en supprimant la ponctuation, etc. et strtr était mon couteau suisse, il a battu le pantalon des expressions régulières ou même str_replace ().
la source
Une fonctionnalité moins connue de PHP est
extract()
une fonction qui décompresse un tableau associatif dans l'espace de noms local. Cela existe probablement pour l'abormination autoglobale mais est très utile pour la création de modèles:Maintenant, vous pouvez utiliser
render_template('index.html', array('foo' => 'bar'))
et uniquement$foo
avec la valeur"bar"
apparaît dans le modèle.la source
Range () n'est pas caché en soi, mais je vois encore beaucoup de gens itérer avec:
quand ils pourraient utiliser:
Et vous pouvez faire des choses simples comme
la source
Read Loop
.L'espace Web compatible PHP est généralement moins cher que quelque chose avec (asp) .net. Vous pourriez appeler cela une fonctionnalité ;-)
la source
Le
static
mot-clé est utile en dehors d'un point de vue POO. Vous pouvez rapidement et facilement implémenter la `` mémorisation '' ou la mise en cache de fonctions avec quelque chose d'aussi simple que:Le
static
mot clé crée une variable qui persiste uniquement dans la portée de cette fonction après l'exécution. Cette technique est idéale pour les fonctions qui frappent la base de données commeget_all_books_by_id(...)
ouget_all_categories(...)
que vous appelleriez plus d'une fois pendant le chargement d'une page.Attention: assurez-vous de trouver la meilleure façon de créer une clé pour votre hachage, dans à peu près toutes les circonstances, ce qui
md5(...)
précède n'est PAS une bonne décision (problèmes de vitesse et de longueur de sortie), je l'ai utilisé à des fins d'illustration.sprintf('%u', crc32(...))
ouspl_object_hash(...)
peut être beaucoup mieux selon le contexte.la source
Une fonctionnalité intéressante de PHP est la CLI . Ce n'est pas si "promu" dans la documentation, mais si vous avez besoin de scripts / applications de console de routine, l'utilisation de cron + php cli est vraiment rapide à développer!
la source
wget http://example.com...
Puis "et imprimez" le truc
Fera écho Blah si $ flag est vrai. NE FONCTIONNE PAS AVEC ECHO.
Ceci est très pratique dans le modèle et remplace le? : ce ne sont pas vraiment faciles à lire.
la source
Vous pouvez utiliser le caractère moins dans les noms de variables comme ceci:
Pourquoi l'utiliser? Aucune idée: peut-être pour un modèle CSS? Ou un JSON étrange que vous devez générer. C'est une caractéristique étrange :)
la source
$item->DataContent->body->{'body.content'}
.La syntaxe HEREDOC est ma fonction cachée préférée. Toujours difficile à trouver car vous ne pouvez pas Google pour <<< mais cela vous évite d'avoir à échapper de gros morceaux de HTML et vous permet toujours de déposer des variables dans le flux.
la source
Peu de gens savent probablement qu'il est possible de spécifier des «variables» constantes comme valeurs par défaut pour les paramètres de fonction:
Les chaînes peuvent être utilisées comme s'il s'agissait de tableaux :
la source
La chose la plus utile à propos du code PHP est que si je ne comprends pas très bien une fonction que je vois, je peux la rechercher en utilisant un navigateur et en tapant:
Le mois dernier, j'ai vu la fonction "range" dans un certain code. C'est l'une des centaines de fonctions que j'ai réussi à ne jamais utiliser mais qui s'est avérée vraiment utile:
Cette URL est un alias pour http://us2.php.net/manual/en/function.range.php . Cette idée simple, de mapper des fonctions et des mots-clés vers des URL , est géniale.
Je souhaite que d'autres langages, frameworks, bases de données, systèmes d'exploitation aient un mécanisme aussi simple pour rechercher de la documentation.
la source
range()
peut être utile pourforeach( range(1, 10) as $i) { };
PHP function
dans la barre d'adresse, il effectuera une recherche Google `` J'ai de la chance '' et vous vous retrouverez presque toujours sur la bonne page de documentation php.Commentaires de bloc rapide
Ces commentaires vous permettent de basculer si un bloc de code est commenté avec un caractère.
la source
// ...
commentaires de ligne et/* ... */
les commentaires de blocage./** /
avant et/**/
après. Vous pouvez basculer le bloc en supprimant et en ajoutant l'espace dans le premier. Cela présente un avantage supplémentaire de travailler avec CSS (et d'autres langages qui ne prennent pas en charge les// ...
commentaires).Ma liste… la plupart d'entre elles relèvent plus des «fonctionnalités cachées» que des «fonctionnalités préférées» (j'espère!), Et toutes ne sont pas utiles, mais… ouais.
Vous pouvez également imbriquer des opérateurs ternaires, ce qui est parfois utile.
Bon, je vais m'arrêter pour l'instant :-)
Hmm, ça fait un moment ...
Donc, je viens de découvrir que vous pouvez passer n'importe quelle chaîne comme nom de méthode SI vous la placez entre accolades. Vous ne pouvez malheureusement pas définir de chaîne comme méthode, mais vous pouvez les attraper avec __call () et les traiter davantage si nécessaire. Hmmm ...
J'ai trouvé ce petit bijou dans les commentaires de Reddit:
Vous ne pouvez pas appeler des fonctions à l'intérieur de {} directement comme ceci, mais vous pouvez utiliser des variables contenant le nom de la fonction et les appeler! (* et * vous pouvez également utiliser des variables variables dessus)
la source
${''} = 456;
hahaha .... tout à fait l'abus.Manipulation de tableau.
Des tonnes d'outils pour travailler et manipuler des tableaux. Ce n'est peut-être pas unique à PHP, mais je n'ai jamais travaillé avec un langage qui le rende aussi simple.
la source
Je suis un peu comme vous, j'ai codé PHP depuis plus de 8 ans. J'ai dû suivre un cours .NET / C # il y a environ un an et j'ai vraiment apprécié le langage C # (détesté ASP.NET) mais cela a fait de moi un meilleur développeur PHP.
PHP en tant que langage est assez pauvre, mais je suis extrêmement rapide avec lui et la pile LAMP est géniale. Le produit final dépasse de loin la somme des pièces.
Cela dit, en réponse à votre question:
http://uk.php.net/SPL
J'adore le SPL , la classe de collection en C # était quelque chose que j'ai aimé dès que j'ai commencé avec. Maintenant, je peux avoir mon gâteau et le manger.
Andrew
la source
Je suis un peu surpris que personne ne l'ait encore mentionné, mais l'un de mes trucs préférés avec les tableaux utilise l'opérateur plus. C'est un peu comme
array_merge()
mais un peu plus simple. J'ai trouvé que c'est généralement ce que je veux. En effet, il prend toutes les entrées du RHS et les fait apparaître dans une copie du LHS, en les écrasant si nécessaire (c'est-à-dire non commutatif). Très utile pour commencer avec un tableau "par défaut" et ajouter des valeurs réelles en un seul coup, tout en laissant les valeurs par défaut en place pour les valeurs non fournies.Exemple de code demandé:
la source
$defaults
devrait être$control_defaults
... + array( ...
n'est pas suffisant pour le souligner? :-)En voici un, j'aime comment définir des valeurs par défaut sur des paramètres de fonction qui ne sont pas fournis est beaucoup plus facile:
la source
Rapide et sale est la valeur par défaut.
Le langage est rempli de raccourcis utiles, ce qui fait de PHP le candidat idéal pour les (petits) projets qui ont un court délai de mise sur le marché. Non pas qu'un code PHP propre soit impossible, cela demande juste un effort et une expérience supplémentaires.
Mais j'aime PHP parce qu'il me permet d'exprimer ce que je veux sans taper un essai.
PHP:
JAVA:
Et oui, cela inclut de ne pas taper Int .
la source
//
est intégré au langage.