?

Log in

No account? Create an account
Main

PHP релиз 5.3 и type hinting

В php-интерналс жаркая война по поводу добавления в язык возможности явно указывать тип параметров:

function foo(int $a, string $b) {}

Как-то вносить новый синтаксис прямо перед или сразу после релиза версии, которая и так Milestone, как-то не здорово.

Доступно в виде патча от Ильи Альшанесткого

Comments

Хмм, а полиморфизм тоже появится али нет ?

Я не разработчик и не постоянный сиделец в интерналс, поэтому я не могу знать.

уточнение. Вы какой полиморфизм имеете в виду?

Вот такой?

function foo(int $a, int $b) {}
function foo(sting $a, string $b) {}
function foo(myType $a, myType $b) {}

Или что-то еще?

Потому, что то, использование интерфейсов вроде есть, а под полиморфизмом "в общем" вроде понимается именно это.
Да, именно этот. (Тоже хотел в вопросе уточнение написать, но постеснялся ;)
в принципе такой полиморфизм можно при желании делать на уровне методов объектов заворачивая вызов через __call, который вызовет нужный приватный метод. Но конечно это извратец некоторый.
еще немного syntax sugar (:
угу. внеочередная инъекция :)
имхо для 5.3 не примут, а если примут то уже для 5.4 >
Зачем?
Иногда таким образом можно защититься от ошибок. Если в параметры попала не та переменная.

Вообще конечно вопрос очень спорный.

Есть еще один интересный пример, который использует хинты, правда типы объектов можно использовать безо всякого патча.

Контейнер для инъекции зависимостей, только не от Симфони, а от Маркуса Бэйкера -- Phemto -- там он выявляет классы, которые надо создать при вызове конструктора по типу аргументов. Звучит непонятно конечно. Но если скачать дистрибутив и почитать там внутри доку, чего сделать стоит, -- она интересная и всего из одной страницы, то будет понятно.
А, и вот еще один зачем:

вместо вот этого:

<?php
/** 
* @param int $foo 
* @param string $bar 
*/ 
function do($foo$bar) { 
    
$foo = (int) $foo
    
$bar = (string) $bar;


писать вот так:

<?php
function do((int) $foo, (string) $bar)


т.е. и конверсия и комментарий не нужен

Edited at 2009-07-11 08:27 am (UTC)