>>1
For a dynamically typed language, how do you do a non-hacky type dispatch?
Why does PHP insist on casting data without the user's permission?
eval is not supposed to be a replacement for a real macro system!
Things PHP is good at:
- Very large library, but lacks in consistency.
- Easy for newbies to learn, but that easiness comes with a high cost (ever check your daily security news?).
- For a dynamically typed language, it doesn't give you as much control over types as one would want. It dumbs this down a lot for the sake of making it easy on the user. Its error handling system is minimal.
True dynamicly typed languages like Lisp can do full type dispatch, have real macros, have an excellent condition system (error/exception handling), they don't keep the user ignorant of types. Data is typed, and you have to know how to use it. You shouldn't add a string and a float and expect an implicit type conversion. I could probably take most PHP features and show how Lisp does it better, but there's not so much fun in that.
There is one place where PHP wins over Lisp, and that's ubiquity: every cheap hosting service out there will support it, and it has its web-development centered library which Lisp doesn't have by default(there are quite a few libraries for web development, that do an excellent job).