W liście Marcus Boerger z dnia środa, 20 sierpnia 2008:
> Hello Volodymyr,
> Basically there is no need for annotations in PHP unlike there is in Python
> for instance. However, while the following work:
> php -r 'class T { const C=42; var $p=T::C; } var_dump(new T);'
> php -r 'class T { const C=42; const D=T::C; } var_dump(new T);
> the next two do not:
> php -r 'class T { const C=42; var $p=T::C + 1; } var_dump(new T);'
> php -r 'class T { const C=42; const D=T::C + 1; } var_dump(new T);
>
> So you might want to have full support for evaluated consts/default values.
I don't really get your point. Annotations are not about constant values, but
about adding arbitrary attributes to classes and methods/functions.
A simple use case (in pseudocode):
class MyController extends BaseController {
// www.example.com/index
@allow('any')
@method('get')
public function index() {
}
// www.example.com/comment
@allow('any')
@method('post')
public function comment() {
}
// www.example.com/admin
@allow('admin')
@method('get')
public function admin() {
}
}
class BaseController {
public function _execute() {
$action = $this->parseTheUrl();
$method = new ReflectionMethod($this, $action);
if ($method->annotations('method') != $_SERVER['REQUEST_METHOD']) {
return $this->methodNotAllowed();
} elseif (!
$this->currentUser->hasPrivilege($method->annotations('allow')) {
return $this->forbidden();
} else {
return $this->$action();
}
}
}
Python does not need annotations, as functions can have arbitrary attribute
set:
def a():
pass
a.x = 5
It also has very powerful mechanism of decorators, which are basically
higher-order functions applied to functions on their definition, but I don't
think Volodymyr asks for so much.
--
Paweł Stradomski
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php