Как вызвать метод класса php
Перейти к содержимому

Как вызвать метод класса php

  • автор:

Способы вызова функции класса в php

@Фарход — очень сильно советую должным образом изучить ООП (причем лучше, если есть возможность, не на примере PHP, а, например, на примере java, c++ etc.), мало того, что вы не будете задавать таких глупых вопросов, так вы еще и понимать что-то будете 😀

24 апр 2012 в 20:25

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

На самом деле, это два абсолютно разных вызова! Первый вызов — это вызов функции не из объекта класса, сконструированного после определения класса, а непосредственно из самого класса. НО! Так можно вызывать только статические методы, то есть методы, принадлежащие самому классу. Такие методы определяются спецификатором «static»:

class A < . static function print($msg). > A::print('Hello World!'); // статический вызов 

Ну, а второй вызов, это уже стандартный вызов метода класса из его объекта:

class A < . function print($msg). > A $a; $a->print('Hello World!'); // вызов из объекта класса . 

Отслеживать
ответ дан 24 апр 2012 в 17:49
13.6k 13 13 золотых знаков 62 62 серебряных знака 122 122 бронзовых знака
В чем плюс или минус вызова не посредственно из класса, а не из обекта класса?
24 апр 2012 в 17:59

Думаю, что не стоит так разбрасываться словом «интерфейс». Кроме того, вы описали инкапсуляцию, а не полиморфизм. Так что за пониманием ООП вам тоже следует обратиться. Полиморфизм позволяет в процессе наследования, например, изменить тот единственный метод для обслуживания данных, назовем это так.

24 апр 2012 в 21:33

@Фарход, на ваш вопрос на форуме уже отвечали. Смысл пользования статическими функциями имеет место, например, когда она (функция) логически принадлежит определенному классу, но фактически не имеет взаимодействия с полями класса. (например, для случая, когда параметров функции и возвращаемого значения (если есть) достаточно, чтобы произвести некоторую обработку).

24 апр 2012 в 21:41
@Asen, да будет так:)
25 апр 2012 в 6:16

В PHP, как ни странно, не является синтаксической ошибкой вызов не статического метода статическим способом. Но генерирует предупреждения. Но вызывать оператором :: обычные методы категорически не рекомендуется — это сулит радикальное снижение читаемости кода, и суровые баги.

Отслеживать
ответ дан 28 июн 2016 в 10:33
Гончаров Александр Гончаров Александр
5,239 15 15 серебряных знаков 39 39 бронзовых знаков

Вот определение которое поможет понять разницу между статическими методами и свойствами классов и методами,св-вами объектов.

Статические методы — это функции, используемые в контексте класса. Они сами не могут получить доступ ни к каким обычным свойствам класса, потому что такие свойства принадлежат объектам. Однако из статических методов можно обращаться к статическим свойствам. И если вы измените статическое свойство, то все экземпляры этого класса смогут получить доступ к новому значению.

ReflectionMethod::invoke

Объект, метод которого требуется вызвать. Для статических методов передаётся null .

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

Возвращаемые значения

Возвращает результат выполнения метода.

Ошибки

Выбрасывает исключение ReflectionException , если в объекте object нет определения метода.

Выбрасывает исключение ReflectionException , если вызвать метод на исполнение не удалось.

Примеры

Пример #1 Пример использования ReflectionMethod::invoke()

public function sayHelloTo ( $name ) return ‘Привет, ‘ . $name ;
>

$reflectionMethod = new ReflectionMethod ( ‘HelloWorld’ , ‘sayHelloTo’ );
echo $reflectionMethod -> invoke (new HelloWorld (), ‘Майк’ );
?>

Результат выполнения приведённого примера:

Привет, Майк

Примечания

Замечание:

ReflectionMethod::invoke() не может использоваться, если ожидаются ссылочные параметры. Вместо него следует использовать ReflectionMethod::invokeArgs() (передача ссылок в списке аргументов).

Смотрите также

  • ReflectionMethod::invokeArgs() — Вызов метода с передачей аргументов массивом
  • __invoke()
  • call_user_func() — Вызывает callback-функцию, заданную в первом параметре

User Contributed Notes 3 notes

13 years ago

Note: If you want to invoke protected or private methods, you’ll first have to make them accessible using the setAccessible() method (see http://php.net/reflectionmethod.setaccessible ).

11 years ago

This method can be used to call a overwritten public method of a parent class on an child instance
The following code will output «A»:

class A
public function foo ()
return __CLASS__ ;
>
>

class B extends A
public function foo ()
return __CLASS__ ;
>
>

$reflection = new ReflectionObject ( $b );

$parentReflection = $reflection -> getParentClass ();

$parentFooReflection = $parentReflection -> getMethod ( ‘foo’ );

$data = $parentFooReflection -> invoke ( $b );

Вызвать метод класса без создания экземпляра

Вызвать метод класса без создания экземпляра можно через модификатор static .

class myFunc < public static function showPHPVersion() < return PHP_VERSION; > >; echo myFunc::showPHPVersion(); // 7.3.12 

В статических методах нельзя использовать свойство $this . Вместо свойство $this можно использовать следующее:

$t = new self(); return $t->vars;

Обновлено: 01 ноября 2020

Комментарии

Авторизуйтесь, чтобы добавлять комментарии

  • Работа с ООП
  • Конструктор и деструктор
  • Наследование
  • Модификаторы доступа (Инкапсуляция)
  • Вызвать метод класса без создания экземпляра
  • Интерфейс и абстрактный класс
  • Вызов объекта как текст или функция
  • Запретить переопределять метод класса
  • Автоматически подключать класс
  • Синглтон (Singleton)
  • Запретить создавать экземпляр класса

Как сделать вызов функции внутри класса php?

Для вызова функции внутри класса используется ключевое слово self или $this-> . Например:

 class MyClass  public function helloWorld()  echo 'Hello World!'; > public function callHelloWorld()  self::helloWorld(); > > $myClass = new MyClass(); $myClass->callHelloWorld(); // => Hello World! 
 class MyClass  public function helloWorld()  echo 'Hello World!'; > public function callHelloWorld()  $this->helloWorld(); > > $myClass = new MyClass(); $myClass->callHelloWorld(); // => Hello World! 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *