Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
2 / 2 / 2
Регистрация: 26.10.2015
Сообщений: 83

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

04.11.2018, 20:12. Показов 1844. Ответов 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(Fast Route\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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.11.2018, 20:12
Ответы с готовыми решениями:

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

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

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

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

Цитата Сообщение от Jodah Посмотреть сообщение
Это значит, что в переменную $r можно передать только объект класса FastRoute\RouteCollector или его наследников.
Спасибо!!! Не могли бы сказать в каком разделе в оф документации можно более подробно об этом почитать!
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
04.11.2018, 20:32
svisch, http://php.net/manual/ru/funct... eclaration
0
2 / 2 / 2
Регистрация: 26.10.2015
Сообщений: 83
04.11.2018, 20:36  [ТС]
Jodah, спасибо!
0
 Аватар для Строитель
1084 / 746 / 364
Регистрация: 09.07.2018
Сообщений: 1,760
04.11.2018, 21:07
Цитата Сообщение от svisch Посмотреть сообщение
Тут непонятно public function baz(Test $other)
А такая запись вам понятна?
PHP
1
public function baz($other)
Если да, то запись вида
PHP
1
public function baz(Test $other)
аналогична предыдущей записи, за исключением того, что во втором случае метод baz() ожидает на входе экземпляр класса Test.

Если это не понятно, почитайте про контроль типов.
0
2 / 2 / 2
Регистрация: 26.10.2015
Сообщений: 83
04.11.2018, 21:14  [ТС]
VNIIAEN, примерно разобрался, но еще помучаю мануал php. Спасибо за ссылку)
0
 Аватар для Зверушь
461 / 369 / 94
Регистрация: 01.05.2010
Сообщений: 1,761
05.11.2018, 18:02
Да что тут разбираться, это просто уточнение типа аргументов.
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
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
05.11.2018, 18:17
Цитата Сообщение от Зверушь Посмотреть сообщение
Программа выбросит TypeError, если функция вернет не true/false или если в $bar будет не целое число.
Это если сделать declare(strict_types=1);, а иначе сработает неявное преобразование типов
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.11.2018, 18:17
Помогаю со студенческими работами здесь

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

Ошибка при обращении из одного класса к методу другого класса
Структура проекта, 2 класса: класс графики MainWindow класс логики Сannibals при обращении из mainwindow к методу из cannibals...

Инициализация шаблонного класса(В конструкторе класса после двоеточия вновь имя класса)
Всем доброго времени суток! Пытаюсь разобраться как работает приведенный мной код. Конкретно, пытаюсь разобраться что происходит в...

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

Возможно ли как-то, зная имя класса, вернуть в каком-либо методе имя класса?
Добрый день! Интересуюсь. Есть Обобщенный метод, например: Add<T>(string nameElement). Какой конкретно Т определяется...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru