powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [PHP5]Функции можно присваивать как объекты - что это значит?
10 сообщений из 10, страница 1 из 1
[PHP5]Функции можно присваивать как объекты - что это значит?
    #39286564
Php5.6
Дошел в изучении до анонимных функций и тут узнал, что можно функцию присвоить переменной. Т.е. функция, конечно же, не копируется, а копируется адрес на нее. С виду механика выглядит как при присваивании переменной объекта. Тогда можно ли присвоить переменно адрес на метод класса:
Код: php
1.
2.
3.
4.
5.
6.
class Base {
   function add($arg1, $arg2){};
};

$base1 = new Base();
$somevar = $base1 -> add;


Очень странно получается, на мой взгляд.
...
Рейтинг: 0 / 0
[PHP5]Функции можно присваивать как объекты - что это значит?
    #39286665
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
летатель космоса,

Вы об этом?
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<?php
class Calc {
    function sum($arg1, $arg2) {return $arg1 + $arg2;}
};

$todo = 'sum';
$a = 3;
$b = 5;
$calc = new Calc();
$result = $calc->$todo($a, $b);
echo $result; // 8
...
Рейтинг: 0 / 0
[PHP5]Функции можно присваивать как объекты - что это значит?
    #39286890
vkleлетатель космоса,

Вы об этом?
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<?php
class Calc {
    function sum($arg1, $arg2) {return $arg1 + $arg2;}
};

$todo = 'sum';
$a = 3;
$b = 5;
$calc = new Calc();
$result = $calc->$todo($a, $b);
echo $result; // 8


O_O?
А присвоить метод класса (либо просто функцию) переменной не дает, ошибка. Так можно только анонимные функции создавать:
Код: php
1.
2.
3.
4.
5.
$logger = function ($arg1){
   print $arg1;	
};

$logger(1);
...
Рейтинг: 0 / 0
[PHP5]Функции можно присваивать как объекты - что это значит?
    #39287028
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
летатель космосаPhp5.6
Дошел в изучении до анонимных функций и тут узнал, что можно функцию присвоить переменной. Т.е. функция, конечно же, не копируется, а копируется адрес на нее. С виду механика выглядит как при присваивании переменной объекта. Тогда можно ли присвоить переменно адрес на метод класса:
Код: php
1.
2.
3.
4.
5.
6.
class Base {
   function add($arg1, $arg2){};
};

$base1 = new Base();
$somevar = $base1 -> add;


Очень странно получается, на мой взгляд.

у помьютера нету переменных, переменные для программиста! у компьютера есть память, и есть адреса в паммять. просто не прикольн онаверно программировать
0xAADD56E445 = 0xAADD57865 + 0xAACC56E445

ведь проще
$total = $count1 + $count2;

Переменная - это именнованая область памяти, с указанием типа данных.

тоесть переменная, это псевдоним(именнование) некого адреса в памяти, с указаниме что там лежит...ну чтобы когда нужно вывести на экран например с адресса 0х10000000, то что бы знать - там число, 8 байт, значит по адресу берём 8 байт и выводим как число.
или там строкка в 8 однобайтовых символов, тогда берём тоже 8 байт и каждый байт как код аски рисуем
или там по этому адрессу начинаеться функция(подпрограмма) - и тогда такие данные вывести на экран нельзя, но можно перейти по этому адресу и выполнять команды которые там находятся
вызов функции это и есть переход на адрес, где она начинаеться, и выполнять команды которые там, а иммя функции - это именнованый адрес её(её кода) начала.

теперь полагаю странным не кажется
function a($param) {}

$a = a;
$b = 10;

a($b); //перейти на адрес именнованый а и выполнять команды оттуда
$aa = a; //ассоциировать с аа адресс, который ассоциирован с -а-
$aa($b); // скобки говорят о том что делается вызов, переход! а $aa говорит на какой адресс.

ЗЫ пхп не типизированный язык, ты просто хлебнул горя изза этого.
в типизированном языке, ты бы обьявлял переменную как адресс, записывал бы в неё адрес функции по типу $perem = &<func_name>;
и было бы более логично, чем это отличаеться от
$p = $a; где р и а обьявленны переменными одного типа - например число.
...
Рейтинг: 0 / 0
[PHP5]Функции можно присваивать как объекты - что это значит?
    #39287177
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автору помьютера нету переменных, переменные для программиста! у компьютера есть память, и есть адреса в паммять

это вы PHP с С/С++ перепутали. у PHP переменные таки есть.
...
Рейтинг: 0 / 0
[PHP5]Функции можно присваивать как объекты - что это значит?
    #39287211
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: php
1.
$somevar = $base1 -> add;


В PHP это обращение к свойству (property)
...
Рейтинг: 0 / 0
[PHP5]Функции можно присваивать как объекты - что это значит?
    #39287215
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да и метод не может существовать отдельно от объекта, это все таки не просто функция. А программист в ПХП может только адресами созданных объектов оперировать.
...
Рейтинг: 0 / 0
[PHP5]Функции можно присваивать как объекты - что это значит?
    #39287223
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
летатель космосаА присвоить метод класса (либо просто функцию) переменной не дает, ошибка. Так можно только анонимные функции создавать:
Код: php
1.
2.
3.
4.
5.
$logger = function ($arg1){
   print $arg1;	
};

$logger(1);



Потому, что анонимная функция, это опять же, объект :)

Код: php
1.
var_dump($logger);



Код: php
1.
object(Closure)#1 (0) { }
...
Рейтинг: 0 / 0
[PHP5]Функции можно присваивать как объекты - что это значит?
    #39287306
alex564657498765453, спасибо, подробно.
В php получается, когда читаешь чужой код, надо учитывать, что какая-нибудь конструкция вроде $variable(); может быть не ошибкой. Прикольно(

HettПотому, что анонимная функция, это опять же, объект :)

Это только к анонимным функциям относится?

Hett
Код: php
1.
$somevar = $base1 -> add;


В PHP это обращение к свойству (property)
Если функция является методом класса, то такой прием не работает - только для "свободных" функций?
...
Рейтинг: 0 / 0
[PHP5]Функции можно присваивать как объекты - что это значит?
    #39289393
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowавтору помьютера нету переменных, переменные для программиста! у компьютера есть память, и есть адреса в паммять

это вы PHP с С/С++ перепутали. у PHP переменные таки есть.

я говорил про компьютер а не про язык/платформу. в С тоже переменные есть(именнованные участки памяти)... :) там даже в любой книжке по С если почитать, в оглавлении написанно - ПЕРЕМЕННЫЕ!!! и начало главы будет чтото типо - в С переменные..... :)

да, завтра может вообще появится язык где уже будет все не так как изначально работает компьютер...:)

ЗЫ прикалываюсь... вы батенька изволилис, не в том месте к слову придрацас.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [PHP5]Функции можно присваивать как объекты - что это значит?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]