Вызвать $this внутри функции

167
25 октября 2017, 06:30

Вот класс

class ClassName{
    public $array = array('1','2');
    function __construct() {
        ....
    }
    function init() {
        function add_class($classes) {
            foreach( $this->array as $class ){
               array_push($classes, $class)
            }
            return  $classes;
        }
        add_filter('post_class', 'add_class');
    }
    function init2() {
        function add_metaboxes() {
            foreach( $this->array as $metaboxes ){
               $checked = ( get_post_meta($post->ID, 'app_category_'.$metaboxes , true) ) ? 'checked' : '';
               echo '<input type="checkbox" '.$checked.' >';
            }
        }
        add_meta_box( 'app_category_box', 'BlaBlaBla', 'add_metaboxes');
    }
}

В ооп не силен, когда пытаюсь так сделать - пишет "Using $this when not in object context in"

Answer 1

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

Замечу, что при повторном вызове функции init интерпретатор упадет с ошибкой fatal error при попытке объявить заново функцию add_class.

Поскольку объявленная функция ни коим боком не будет относится к классу (который ее объявил), то, конечно, речи о доступе к $this там быть не может. О чем и сказано в сообщении об ошибке.

Как вариант решения (если используете данный массив единственном экземпляре) может стать объявление массива как статического члена класса.

public static $array = [1,2];

В дальнейшем для обращения к массиву из сторонних функций будут иметь следующий вид:

foreach( ClassName::$array as $class ){
}

Повторюсь, что статические свойства существуют в единственном экземпляре и одинаковы межде всеми экземплярами класса. Но по всей видимости, класс у вас используется тоже в единственном экземпляре.

READ ALSO
NetBeans и подсветка кода

NetBeans и подсветка кода

Подскажите как настроить NB чтобы короткие дескрипторы PHP то же раскрашивали синтаксис, сейчас в коротких дескрипторах синтаксис не подсвечивается...

254
БПФ звукового сигнала (C++ и SFML)

БПФ звукового сигнала (C++ и SFML)

У меня вопрос по БПФ звукового сигналаЯ хочу нарисовать график на основе звукового сигнала

236
Потерялся 1 бит в long double

Потерялся 1 бит в long double

По следам вопроса о битовом представлении вещественных чисел и моего ответа на него

224