Что означает параметр функции без знака доллара?

Я изучал PHP ООП и наткнулся на это интересное объявление функции:

class ShopProductWriter {

    public $products = array();

    public function addProduct(ShopProduct $shopProduct) {
        //code here..
    }
}

заметили, что первый параметр функции addProduct ShopProduct не имеет знака доллара? Что это означает?


person Marjo Forcado    schedule 01.12.2015    source источник


Ответы (2)


это не параметр. это определение типа $shopProduct. эта функция принимает только 1 параметр, поэтому $shopProduct может быть только классом ShopProduct

person Murat Cem YALIN    schedule 01.12.2015

Это типизация.

Список параметров должен быть разделен запятыми. Это стоит перед параметром и объявляет тип параметра.

Ваш пример typehint предназначен для объекта класса ShopProduct.

Значение: если было передано что-то еще, например целое число или массив, метод выдал бы исключение. (Это отражает наследование. Предположим, что существует экземпляр SpecificShopProduct, класса, который будет расширять ShopProduct, вы также можете передать его.)

Можно указать объекты и массив, класс или интерфейс. Невозможно указать обычные типы переменных, такие как целые числа или строки, и вы не можете указать тип массива объектов.

public function foo(array someArray, LoggerInterface $logger)
{
}

Тем не менее, для некоторых других типов вы можете использовать комментарии phpDoc, хотя они предназначены для удобочитаемости и поддержки IDE, они не будут навязывать тип; это означает, что вам нужно будет проверить для себя, что был передан правильный тип.

/**
 * @param ShopProductWriter[] arrayOfObjects
 * @param int $someInt
 * @param string $someString
 */

public function foo(array arrayOfObjects, $someInt, $someString)
{
}
person k0pernikus    schedule 01.12.2015
comment
Я люблю это. БОЛЬШОЕ СПАСИБО! - person Marjo Forcado; 01.12.2015
comment
Я не могу в данный момент. но как только получу 15 очков репутации. Я вернусь сюда, чтобы закончить дело - person Marjo Forcado; 01.12.2015