2008-09-15 6 views
9

Je suis juste curieux de savoir s'il existe un projet qui tente de regrouper toutes (ou la plupart) des fonctions intégrées de PHP dans une hiérarchie de classes plus orientée objet. Par exemple, regrouper toutes les fonctions de chaîne dans une seule classe String, etc.Quelqu'un a-t-il essayé de rendre les fonctions système de PHP plus orientées objet?

Je réalise que cela ne résoudra réellement aucun problème (sauf si les modifications ont eu lieu au niveau du code source PHP), puisque tous les intégrés les fonctions seraient toujours accessibles dans l'espace de noms global, mais cela rendrait certainement la facilité d'utilisation beaucoup plus facile.

Répondre

4

Pour répondre à votre question, Oui il existe plusieurs bibliothèques qui font exactement ce dont vous parlez. En ce qui concerne celui que vous voulez utiliser est une question entièrement différente. PHPClasses et pear.org sont de bons endroits pour commencer à chercher de telles bibliothèques.

Mise à jour: Comme d'autres l'ont suggéré, SPL est une bonne bibliothèque et intègre de nombreuses fonctions PHP intégrées. Cependant, il y a encore beaucoup de fonctions PHP qu'il n'emballe pas. Nous laissant toujours sans balle d'argent. En utilisant des frameworks tels que Cakephp et Zend (d'autres aussi), j'ai remarqué qu'ils essayaient de résoudre certains de ces problèmes en incluant leurs propres bibliothèques et bases de construction telles que la connectivité DB dans le cadre de travail. Donc les frameworks peuvent être une autre solution

5

Je pense que quelque chose comme ceci est intergral pour que PHP avance. Etant principalement un programmeur .Net, je trouve PHP pénible à travailler avec ses 1 million et 1 fonctions globales. C'est bien que PHP 5.3 ait des espaces de noms, mais cela n'aide pas beaucoup quand leurs propres bibliothèques ne sont même pas orientées objet, et encore moins emploient des espaces de noms. Cela ne me dérange pas tellement le langage PHP, mais leur API est terriblement désorganisée, et elle a probablement besoin d'une refonte complète. Un peu comme ce que VB a traversé quand il est devenu VB.Net.

+1

D'accord, mais ... leur documentation est inégalée. –

+0

Je suis tout à fait d'accord, je serais ravi de voir cela comme une priorité pour PHP 6. Comme ils libèrent maintenant le support de l'espace de noms dans les prochains 5.3 version, j'espère que la prochaine étape logique est de commencer à déplacer leurs fonctions de bibliothèque standard à sa propre hiérarchie d'espace de noms/classe. – Wilco

+0

nous pouvons seulement espérer – SeanDowney

6

Trop de fois. Dès que quelqu'un découvre que PHP a des fonctionnalités OO, ils veulent tout envelopper dans les classes.

Le point sur les choses OO en PHP est que vous pouvez architecturer vos solutions de la manière que vous voulez. Mais envelopper les fonctions existantes dans les objets ne rapporte pas beaucoup. Ceci étant dit, le noyau de PHP est déjà orienté objet. Jetez un oeil à SPL.

+0

SPL est certainement un pas dans la bonne direction. Je pense juste qu'il est extrêmement salissant d'avoir autant de fonctionnalités de base dans l'espace de noms global. Il me semble ridicule que je doive m'inquiéter de nommer des collisions avec ce qui est intégré à la langue. – Wilco

+0

Si vous écrivez votre propre code d'une manière OO, il y a rarement de souci. Depuis les chances de conflit avec quelque chose dans le noyau est presque nul. Et même si vous le faites, ça va échouer. Mais j'arrive complètement d'où tu viens. PHP n'a tout simplement pas cette saveur. Python pourrait être un meilleur choix. –

4

Je ne suis pas d'accord. La programmation orientée objet n'est pas intrinsèquement meilleure que la programmation procédurale. Je crois que vous ne devriez pas utiliser OO sauf si vous avez besoin d'un comportement polymorphique (héritage, méthodes de substitution, etc.). Utiliser des objets comme de simples conteneurs pour le code ne vaut pas la surcharge. C'est en particulier vrai de chaînes parce que leur beaucoup utilisé (par exemple en tant que clés de tableau). Chaque application peut généralement bénéficier de certaines fonctionnalités polymorphes, mais généralement à un niveau élevé. Souhaitez-vous jamais étendre une classe String?

De plus, un peu d'historique est nécessaire pour comprendre le nommage des fonctions impaires de PHP. PHP est basé autour de la bibliothèque Standard C et de la norme POSIX et utilise plusieurs des mêmes noms de fonctions (strstr, getcwd, ldap_open, etc.). C'est en fait une bonne chose car elle minimise la quantité de code de liaison de langage, assure un ensemble complet de fonctionnalités bien pensées (à peu près tout ce que vous pouvez faire en C que vous pouvez faire en PHP) et ces bibliothèques système sont hautement optimisées. strchr est généralement inline ce qui le rend environ 10 fois plus rapide).

+0

Point bien pris. Que cela vaille ou non les frais généraux dépendra aussi du contexte. Nous sacrifions les performances pour du code simplifié tout le temps - sinon nous serions tous en train de développer en assemblage. – Wilco

Questions connexes