Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP: ООП
Войти
Регистрация
Восстановить пароль
 
svisch
1 / 1 / 2
Регистрация: 26.10.2015
Сообщений: 30
1

Разъясните синтаксис - имя класса при передаче аргументов методу класса

04.11.2018, 20:12. Просмотров 111. Ответов 8
Метки нет (Все метки)

Здравствуйте. Несколько раз столкнулся с нижеследующим кодом классов.

1. При разборе роутера FastRoute:
PHP
1
2
3
4
$dispatcher = FastRoute\simpleDispatcher(function(FastRoute\RouteCollector $r) {
    $r->addRoute('GET', '/', 'Page/Display');
    $r->addRoute('GET', '/users', 'User/getUsers');
    ...
Непонятна строка $dispatcher = FastRoute\simpleDispatcher(function(FastRoute\RouteCollector $r)

2. На php.net в примере " Доступ к элементам с модификатором private из объектов одного типа"

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Test
{
    private $foo;
 
    public function __construct($foo)
    {
        $this->foo = $foo;
    }
 
    private function bar()
    {
        echo 'Доступ к закрытому методу.';
    }
 
    public function baz(Test $other)
    {
        // Мы можем изменить закрытое свойство:
        $other->foo = 'привет';
        var_dump($other->foo);
 
        // Мы также можем вызвать закрытый метод:
        $other->bar();
    }
}
 
$test = new Test('test');
 
$test->baz(new Test('other'));
Тут непонятно public function baz(Test $other)

Гуглом ничего не нашел(
Буду признателен за направление где искать или за ссылку. Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2018, 20:12
Ответы с готовыми решениями:

Создание экземпляра класса, имя класса находиться в строковой переменной
Подскажите люди добрые, как можно выйти из такой ситуации, вот допустим имеются классы class new1{...

Вызов другого класса при создании свойства класса
Здравствуйте! Пишу внутри класса, но не в методе: public $ln = DB::getLang(); DB - это другой...

обращения к методу класса из адресной строки
Все привет. Только начал постигать азы ООП, возник такой вопрос - каким образом можно через...

Как обратиться к методу текущего класса
Вообщем такая проблема. У нас есть класс в этом классе есть метод. И нам нужно в теле данного...

Динамический вызов разных методов класса с разным количеством аргументов
Здравствуйте, возникла такая проблема. У меня есть класс в котором есть несколько методов которые...

8
Jodah
Эксперт PHP
2777 / 2429 / 1035
Регистрация: 01.08.2012
Сообщений: 8,570
04.11.2018, 20:15 2
Цитата Сообщение от svisch Посмотреть сообщение
FastRoute\RouteCollector $r
Это значит, что в переменную $r можно передать только объект класса FastRoute\RouteCollector или его наследников.
1
svisch
1 / 1 / 2
Регистрация: 26.10.2015
Сообщений: 30
04.11.2018, 20:25  [ТС] 3
"FastRoute\RouteCollector" насколько я понимаю это класс RouteCollector в пространстве имен FastRoute? Верно?

Цитата Сообщение от Jodah Посмотреть сообщение
Это значит, что в переменную $r можно передать только объект класса FastRoute\RouteCollector или его наследников.
Спасибо!!! Не могли бы сказать в каком разделе в оф документации можно более подробно об этом почитать!
0
Jodah
Эксперт PHP
2777 / 2429 / 1035
Регистрация: 01.08.2012
Сообщений: 8,570
04.11.2018, 20:32 4
svisch, http://php.net/manual/ru/functions.a...pe-declaration
0
svisch
1 / 1 / 2
Регистрация: 26.10.2015
Сообщений: 30
04.11.2018, 20:36  [ТС] 5
Jodah, спасибо!
0
VNIIAEN
117 / 83 / 38
Регистрация: 09.07.2018
Сообщений: 228
04.11.2018, 21:07 6
Цитата Сообщение от svisch Посмотреть сообщение
Тут непонятно public function baz(Test $other)
А такая запись вам понятна?
PHP
1
public function baz($other)
Если да, то запись вида
PHP
1
public function baz(Test $other)
аналогична предыдущей записи, за исключением того, что во втором случае метод baz() ожидает на входе экземпляр класса Test.

Если это не понятно, почитайте про контроль типов.
0
svisch
1 / 1 / 2
Регистрация: 26.10.2015
Сообщений: 30
04.11.2018, 21:14  [ТС] 7
VNIIAEN, примерно разобрался, но еще помучаю мануал php. Спасибо за ссылку)
0
Зверушь
429 / 341 / 89
Регистрация: 01.05.2010
Сообщений: 1,664
05.11.2018, 18:02 8
Да что тут разбираться, это просто уточнение типа аргументов.
PHP
1
function baz(Test $other)
Здесь $other должен быть экземпляром класса Test, иначе будет TypeError
PHP
1
2
3
4
5
6
$somevar1 = new Test();
$somevar2 = new Test2()
baz(new Test()); //валидно
baz($somevar1); //валидно 
baz($somevar2); //ошибка 
baz(555); //ошибка
Добавлено через 2 минуты
Начиная с php 7 можно делать уточнения для простых типов и для возвращаемого значения. Очень полезное нововведение.
PHP
1
function foo(int $bar): bool
Программа выбросит TypeError, если функция вернет не true/false или если в $bar будет не целое число.
0
Jewbacabra
Эксперт PHP
3511 / 2918 / 1304
Регистрация: 24.04.2014
Сообщений: 8,870
05.11.2018, 18:17 9
Цитата Сообщение от Зверушь Посмотреть сообщение
Программа выбросит TypeError, если функция вернет не true/false или если в $bar будет не целое число.
Это если сделать declare(strict_types=1);, а иначе сработает неявное преобразование типов
1
05.11.2018, 18:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.11.2018, 18:17

Статическое связывание: имя класса
Есть базовый объект который реализует запись в директорию класса доп. данных для него. Вопрос в том...

Как передать имя класса в функцию
Добрый день. Есть класс: class Model { public static function print() { ...

Как определить имя текущего класса php?
Есть такой код: class A { private static $obj = array(); public function __get($name) ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru