2013-05-05 3 views
3

Глядя на документацию PHP о интерфейсах, в частности здесь: PHP: Object Interfaces - Manual. Следующий рабочий код приведен в качестве рабочего примера. Может ли кто-нибудь объяснить, что объявлено как «головоломка», как часть сигнатуры функции, пожалуйста?PHP - использование bareword в объявлениях функций интерфейса

<?php 
interface a 
{ 
    public function foo(); 
} 

interface b extends a 
{ 
    public function baz(Baz $baz); 
} 

// This will work 
class c implements b 
{ 
    public function foo() 
    { 
    } 

    public function baz(Baz $baz) 
    { 
    } 
} 

ответ

4

Он называется type hinting.

Метод baz() рассчитывает первый аргумент, $baz, быть объектом типа Baz. Тип объекта исходит либо из класса, из которого он построен, либо из интерфейса, который он реализует.

+0

Вы, ребята, делаете это слишком просто. 20 минут различных поисков в google для gpp функции и т. П. Ни с чем. Даже ответ на это, говорящий кому-то, что использование такого простого слова неслыханно в программировании! Быстрая почта здесь, и в течение 10 минут ... удар! :) – dewd

+0

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

+0

Очень верно. Я нахожу то, что я очень быстро исчезаю из своих знаний так же быстро, если они не используются. Я запомню этот! :) – dewd

0

В соответствии с documentation его называют типом намекая

БАЗ название класса

и, следовательно, метод База ожидает, что первый аргумент, $ База, чтобы быть объектом

+0

Да, документация отличная, когда вы знаете, что ищете! Очевидно, я не знал, чтобы искать намеки на тип. Спасибо за ссылку. – dewd

+0

Cheers @dewd. Надеюсь, ты получил свой ответ. Обязательно принимайте ответ, какой бы вы ни хотели. –

2

В классе c функции baz() требуется параметр, являющийся объектом, где он является классом Baz. $baz - это просто имя объекта. Он используется внутри функции baz().

Это называется Type Hinting

PHP 5 вводит тип намекая. Теперь функции могут принудительно устанавливать параметры (указывая имя класса в прототипе функции ), интерфейсы, массивы (начиная с PHP 5.1) или вызываемые (начиная с PHP 5.4). Однако, если NULL используется как значение по умолчанию , оно будет разрешено в качестве аргумента для любого последующего вызова.

Если класс или интерфейс заданы как подсказка типа, то все его дочерние элементы или реализации разрешены также.

Тип подсказки нельзя использовать со скалярными типами, такими как int или string. Нельзя использовать и черты.