Hi all.

I'm using php 5.1.2 compiled from source, with Apache 2.2.0 
and MySQL 5.0.18 on SuSE Linux 9.2 pro.

I really do not see the need to keep telling php I'm 
refering to the properties and method of the class I'm 
already in, when php 5 should be able to deduce this from 
the context of the class I'm coding in.

I was wondering if it would be possible in future versions 
of php to provide a PHP_INI_CLASS constant and a 
this.use_implicit TRUE|FALSE option please, valid only 
within a class's definition? I guess it could be moved to 
php.ini later, if it became popular, and was required there.

This would allow a programmer to set the default value of 
whether to use $this-> as a prefix to class properties and 
methods, or not. (Similar to the way php 5.1.2 handles 
methods without a visibility declaration - i.e. they default 
to public)

This option to select default implicit referencing could 
also apply to inherited properties and methods.

This would save ALOT of repetitive typing, and make the code 
alot more concise. This would be similar to & being made 
implicit when passing object references to method calls.

this.use_implicit could default to FALSE, so it would not 
interfere with current code compatibility.

Developers could then choose to enable this.use_implicit 
on a class by class basis. This would allow a developer to 
do a gradual upgrade of their classes, without breaking any 
code.

The only problem I can see, is that the parameters passed to 
the __construct() function would have to use different names 
to avoid any ambiguity conflicts  - see example below.

As the parameters are only usually passed into a class once, 
when the object is instantiated, this would cut down on a 
lot of coding once the parameters are inside the class.

So, instead of coding something like:

(From chapter 19 example 25 of the manual)

<?php

class Connection {
    protected $link;
    private $server, $username, $password, $db;
    
    public function __construct($server, $username, $password, $db)
    {
        $this->server = $server;
        $this->username = $username;
        $this->password = $password;
        $this->db = $db;
        $this->connect();
    }
    
    private function connect()
    {
        $this->link = mysql_connect($this->server, $this->username, 
$this->password);
        mysql_select_db($this->db, $this->link);
    }
    
    public function __sleep()
    {
        mysql_close($this->link);
    }
    
    public function __wakeup()
    {
        $this->connect();
    }
}
?> 


I was thinking of something more like this:

<?php

class Connection {
    
    // use $this-> implicitly within this class only
    ini_set('this.use_implicit', ON);

    protected $link;
    private $server, $username, $password, $db;
    
    public function __construct($server_p, $username_p, $password_p, $db_p)
    {
        $server    = $server_p;
        $username  = $username_p;
        $password  = $password_p;
        $db        = $db_p;
        connect();
    }
    
    private function connect()
    {
        $link = mysql_connect($server, $username, $password);
        mysql_select_db($db, $link);
    }
    
    public function __sleep()
    {
        mysql_close($link);
    }
    
    public function __wakeup()
    {
        connect();
    }
}

?> 


Any comments or suggestions would be welcomed.

Keith Roberts

In theory, theory and practice are the same;
In practice they are not. 

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

Reply via email to