On Tue, 2008-01-08 at 16:03 +0200, Tomi Kaistila wrote:
> > I believe the cleanest solution that we could implement would be using
> > the type casting with "Type" objects.
> I experimented with this for a couple of months, a couple of weeks ago. In
> opinion, it does not work well. I am guessing developers at java also figured
> the same since they still also have primitive types. Aside from the mentioned
> performance cost, it results in ugly and clumsy code. Not to mention you need
> to cast the objects into primitive types if you wish to use the variables
> with PHP functions.
>
> function random(Integer $max, Integer $min)
> {
> $n = rand($min->getInteger(), $max->getInteger());
> return $n;
> }
>
> Implementing the __toString() method in the classes helps a little but not
> much.
But the syntax is longer ("$a = 5" vs "$a = new Integer(5)"), and if you
have a large application with hundreds of integers it starts to add up.
Performance is also much worse when using objects for every variable.
> And really, if you think about it, just adding support to scalar type hinting
> solves the hold issue, thus making this sort of solution pointless and a pit
> hole wasted energy and time.
>
> > Is there any reason we can't at least add "scalar" and
> > "resource" (and possibly "object" for generic objects) to typehints?
> This sounds like, at least, a partial victory to adding proper type hinting
> to
> PHP but in my mind it is not enough. I have counted that about a quarter of
> all type hints that I would make is about matching the argument's type to
> scalar. The rest are about separating specific scalars from each other. In
> most cases integer and boolean.
Better than nothing.
> I would probably end up not using type hinting at all, just to save the users
> of my API from the confusion and just do the type checks myself inside my
> methods.
>
> > Thinking about this, simply because we all know PHP __CAN__ type
> > juggle, there is no need for any errors/warnings/notices on scalar
> > types. It will be up to the API developer to make sure appropriate
> > values are supplied (if necessary), so this reduces the type checking.
> In other words, it is not "in the spirit of PHP" to enable strict type
> hinting. I can understand this argument, but I still disagree heavily with
> this approach.
>
> 1) It is not consistent with the way that Array and Object type hinting
> works.
> While you might make the argument that it is not an issue because you cannot
> implicitly cast those types, it does create an annoying (yet another) magic
> behavior thing in PHP that people need to learn and remember. If anything, it
> will confuse new users, which I believe a lot of people were concerned about.
>
> Essentially, if it is necessary (and most of the time it is) to validate the
> value beyond just the type, you might as well do the casting at the same time
> as you validate.
>
> 2) The reason people are asking for type hinting for scalars is specifically
> to move some of the responsibility from the API developer to the user of the
> API and it is not an unreasonable request. After all, if person A has a
> program that asks for user input, the best place for validation is not in the
> class that person B wrote. The values should be validated in the program that
> asked for the input. Since the validation is necessary, person A can easily
> cast the type of the input at the end of the process, before he passes it to
> the class.
>
> E.g.
>
> function validate($input)
> {
> // validate the input
> // return false if it was not valid
> // otherwise return a properly cast value
> }
>
> $input = $_GET['var1'];
> $input = validate($input)
>
> if(! empty($input)) {
> doSomething($input);
> }
>
> This seems like a perfectly logical division of labor. The validator
> validates
> and casts and the library class acts on the proper input.
>
> Tomi Kaistila
> PHP Developer
>
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php