i'd like to discuss with you a growing problem regarding php applications.

i see the features taken into account for ze2 have been made regarding the
needs of advanced php developers who design complete applications with php
instead of just dumping out some dynamic content.

php is ease of use because you don't have to care about important language
needs like types.
that makes following code possible

$a = "hello u ";
$b = 2;
echo $a.$b;

imho that is a good feature for coding simple things fast "from brain to
keys".
however in a more complicated and larger context, as in frameworks and
libraries for example,
this leads the coder to produce more code to get the things bugfree.

consider a function inserting a row into a table with id and name:

function ins($id, $name) {
    if (is_numeric($id) && is_string($name)) {
        // do insert
        return true;
    }
    return false;
}

through loose typing a value of $id = "1 " (note whitespace) is possible and
insert would fail.
no problem, extending condition to is_numeric(trim($id)) does it.
anyways, a value of $name=444 causes failing this condition too, although it
should be dyncasted into a string.

instead consider this:

bool function ins(int $id, string name) {
    //do insert
    return true;
}

and everything is right.

what i want to point out is the loose vs. strong type issue - certainly
discussed prior this post.

i'd like to propose the introduction of an explicit command for ze2 to
resolve this issue.
as known of vb for example, explicit forces coder to explicitly declare
variables.
this would require to be "explicit" as a language directive or option.

example:

#!php --explicit (or something similar, perhaps a php.ini entry)

mixed $mixed = "hello";
string $str = "string";
int $num = 5;
bool $ok = false;
array $ar;
float $rate;

bool function ins(int $id, string $name);

class test {
    private bool $done; //private
    var string $name; //public;
    private object $o;

    string print() {
        return $name;
    }
}

object $o = new test();
echo $o->print();


i don't have any clue about implications regarding parsing and handling such
explicit behaviour,
especially considering type juggling, but juggling could be disabled when
explicit is turned on.

is there a chance to realize this ? and moreover, is this a desired, planned
feature ?
i'd welcome this....

just my 2c;

ilker






-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to