2016-06-28 4 views
0

Я пытаюсь вызвать несколько методов из «Содержание» класса, т.е.вызова метода PHP, где имя переменной

$content .= Content::page_contact_us(); 

Кроме page_contact_us может быть что-нибудь ...

Я попытался

$method = 'Content::page_contact_us()'; 

$content .= $$method_name; 

И $content был пустым ...

+1

как насчет 'call_user_func ($ method_name)'? Но удалите '()' из объявления переменной. – apokryfos

+0

На страницах справки есть несколько [примеров] (http://php.net/manual/en/functions.variable-functions.php). – apokryfos

+0

'Content :: $ method_name()' –

ответ

1

Вы можете использовать следующий синтаксис для вызова переменной Функции:

$func = 'foo'; 
$func();  // This calls foo() 

PHP Docs

Или в вашем случае:

$method = 'Content::page_contact_us'; 
$content .= $method(); 
+0

'Или в вашем случае:' [является фатальной ошибкой] (http://i.stack.imgur.com/OQAQ6.png) в php <7.0. – AD7six

+0

Проверьте ответ AD7six на лучший способ сделать это. Переменные функции и вызовы классов лучше обрабатываются с помощью [call_user_func] (http://php.net/manual/en/function.call-user-func.php) – Machavity

+2

@Machavity Нет, это не так. Оставайтесь с '$ method()', но вместо этого используйте '$ method = ['Content', 'page_contact_us']'. – NikiC

2

Имя метода может быть переменной, в том же образом function name can be a variable:

<?php 

class Content 
{ 
    public static function foo() 
    { 
     echo 'Hello'; 
    } 
} 

$name = 'foo'; 
echo Content::$name(); // Outputs 'Hello' 

Если вам действительно нужно/среднее ничего, call_user_func позволяет вызывать что угодно:

$result = call_user_func('time'); // a function 

$result = call_user_func('Content::foo'); // a static method 
$result = call_user_func(['Content', 'foo']); // a static method 

$result = call_user_func([$contentObject 'someMethod']); // an instance method 

Есть еще примеры в the callable docs.

+0

$ content. = Content :: $ method_name(); работал красиво ... спасибо ... Но только для завершения - $ content. = call_user_func (['Content', $ method_name]); Это вызвало следующую проблему: Неустранимая ошибка: использование $ this, когда не в объектном контексте .... в функции утилиты базы данных ... – jxwd

+0

'в функции полезности базы данных', это не связано с вашим вопросом. – AD7six

+0

, не вдаваясь в подробности ... это точно такой же метод ... просто используется двумя разными способами ... оба пути должны быть статичными, но кажутся не эквивалентными по-другому ... в чем разница? – jxwd

0

Вы можете достичь этого с помощью PHP call_user_func(). Вот так:

<?php 
    class Content{ 
     public static function whatever(){ 
      return "This is a response from whatever Method inside the Content Class..."; 
     } 
    } 


    $method  = 'whatever'; 
    $content = ""; 
    $content .= Content::whatever(); 

    $content2 = call_user_func(array('Content', $method)); 

    var_dump($content); 
    var_dump($content2); 

    //RESPECTIVELY DISPLAYS::    
    'This is a response from whatever Method inside the Content Class...' (length=67) 
    'This is a response from whatever Method inside the Content Class...' (length=67) 
Смежные вопросы