PHP: установка переменной экземпляра в функцию [duplicate]

Действительно, эта конкретная компоновка (явная реализация свойства интерфейса get-only автоматически реализуемым свойством) не поддерживается языком. Таким образом, либо делает это вручную (с полем), либо записывает частную автоматическую поддержку и прокси-сервер. Но, честно говоря, к тому моменту, когда вы это сделали, вы могли бы использовать поле ...

  private bool MyBool {get; set;} bool IMyInterface.MyBoolOnlyGet {get {  return MyBool;}}  

или:

  private bool myBool;  bool IMyInterface.MyBoolOnlyGet {get {return myBool;}}  
39
задан Rocket Hazmat 24 May 2013 в 18:13
поделиться

5 ответов

Синтаксис callback немного нечетный в PHP. Вам нужно сделать массив. Первый элемент - это объект, а второй - метод.

call_user_func(array($player, 'SayHi'));

Вы также можете сделать это без call_user_func:

$player->{'SayHi'}();

Или:

$method = 'SayHi';
$player->$method();
77
ответ дан Rocket Hazmat 15 August 2018 в 14:45
поделиться
  • 1
    Удивительное спасибо! – Steve Bauman 9 May 2014 в 20:15
  • 2
    Пожалуйста, третий пример, идентифицированный с определенным именем? – Marco Dufal 16 April 2018 в 03:47
  • 3
    Как называется второй метод? – Zack 8 May 2018 в 14:11

Вам нужно передать объект и метод вместе как массив:

call_user_func(array($Player, 'SayHi'));

См. обратные вызовы , в частности:

// Type 3: Object method call
$obj = new MyClass();
call_user_func(array($obj, 'myCallbackMethod'));
7
ответ дан meagar 15 August 2018 в 14:45
поделиться

Вы все равно создаете объект класса, поэтому вы можете использовать объект для вызова его функции.

$player = new Player();
$player->SayHi();

или использовать обратный вызов

$player = new Player();
call_user_func(array($player, 'SayHi'));
0
ответ дан Nagarjun 15 August 2018 в 14:45
поделиться
  • 1
    Это был просто пример. Мне нужно сохранить объекты и их функции как обратные вызовы, которые будут запущены из другой системы, но я не хотел вводить этот код. – user441521 24 May 2013 в 18:05
  • 2
    см. мой отредактированный ответ – Nagarjun 24 May 2013 в 18:06

$player->SayHi();

Я предпочитаю эту форму.

-8
ответ дан zeyorama 15 August 2018 в 14:45
поделиться
  • 1
    И все же это не дает отдаленного ответа на вопрос. -1 – Matt Ball 24 May 2013 в 18:03
  • 2
    Дело в том, что 'SayHi' является строкой. – Rocket Hazmat 24 May 2013 в 18:04
  • 3
    Вы имели в виду $player->$SayHi()? – greenoldman 18 June 2016 в 20:55
1
ответ дан Toskan 5 September 2018 в 13:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: