I can certainly see a use for strings as Value Objects, if only for
readability. Chaining a series of methods is much more readable (to me at
least) than wrapping a series of functions. See:
$str = $str->substr(0, 5)->upper()->trim('\n');
vs.
$str = trim(strtoupper(substr(0, 5, $str)), '\n');
That said, the advantage of functions is that you can trivially add your own.
Adding new methods to a class in PHP requires either inheritance (which is
very limiting in many ways) or all sorts of thoroughly weird mechanisms for
sorta implementing mix-ins. I see that as a more limiting factor than using
functions instead of methods.
(Not to say that value objects, auto-boxing, prototype inheritance, and other
semi-functional features aren't cool; I'd love to have more of those in PHP,
but they're a considerably harder problem to solve.)
I would also dispute the idea that "everything is a class/object" is a
necessary design feature of a "mature OO language". It's a design feature of
Java, which is sort of the poster child of classic OO. But Javascript takes
an entirely different, functional-esque approach of everything is an object,
including classes. (Weird but cool.) Python, Perl, and Ruby do their own
weird things. C++ has multiple inheritance. I'm sure there's other
languages I should mention that I am missing, but you get the idea.
Don't make things an object unless there's a reason to. Most of the
OOP "features" that PHP lacks that would be useful to have are, IMO, the more
functional-esque stuff from Javascript and its ilk, not classes-all-around.
On Monday 03 December 2007, Jordan Wambaugh wrote:Thanks. I was not aware of SPL's file and array classes. As for the string
class, some of it is done, and should work in 5.x HEAD. I fully plan to add
Unicode support for PHP 6's HEAD. Is there any other concerns you may have
about a string class (other than it being a big task)? I think it would be
great to unify, and standardize all the string functions in PHP into a
class.
I don't want to rewrite anything already written, so I'll go ahead and take
a look at ArrayObject and ArrayIterator. I'd love to help PHP as much as
possible.
Thanks,
Jordan.
-----Original Message-----
From: Marcus Boerger
Sent: Monday, December 03, 2007 12:18 PM
To: Jordan Wambaugh
Cc:
[email protected]Subject: Re: [PHP-DEV] Object Oriented standard Library
Hello Jordan,
have a look at the SPL extension (Standard PHP Library) which introduces
a few things (for instance SplFile). Have a look here:
http://php.net/~helly I do not think we need a string class right now
unless you want to provide a full unicode one that later works with HEAD
seamingly. If you are intersted, then the ArrayObject/ArrayIterator
implementation in SPL can be made much faster. I know what to do but have
no time for that...
and as always, help is always welcome here
and if you have something to show, then show us :-)
marcus
Monday, December 3, 2007, 5:43:19 PM, you wrote:
I am currently working on a Object-Oriented Library extension that wraps
a lot of functionality in PHP's standard library dealing with strings,
arrays, fileIO, etc. into classes.
(String class, Collection class, etc.)
This would allow end-users to create objects that represent data types
and resources, and take advantage of all the benefits of OOP (object
chaining, polymorphism, etc) all in a c compiled extension.
Example:
$myString=new String("Hello world!");
$myLowerCaseString =
$myString->copy()->replace("world","universe")->lowerCase();
The goal of this project is to help PHP mature into a more
object-oriented language with an object oriented library, while
addressing a common complaint about the standard library not being very
consistent
(http://en.wikipedia.org/wiki/Php#Criticism [8th bullet])
I have already implemented a couple classes, but would like to get feedback
from the PHP development community on the idea of creating such a library
for PHP. Also, any suggestions would be greatly appreciated.
Thanks,
Jordan Wambaugh
Best regards,
Marcus
--
Larry Garfield AIM: LOLG42
[email protected] ICQ: 6817012
"If nature has made any one thing less susceptible than all others of
exclusive property, it is the action of the thinking power called an idea,
which an individual may exclusively possess as long as he keeps it to
himself; but the moment it is divulged, it forces itself into the possession
of every one, and the receiver cannot dispossess himself of it." -- Thomas
Jefferson