Как получить переменную из функции publi c в другую функцию? - PullRequest
0 голосов
/ 20 февраля 2020

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

Мне нужно получить $vsurl из метода ajax () в другой (функция publi c stati c). Я попытался return и global, но я получаю сообщение об ошибке:

Неустранимая ошибка: Uncaught Ошибка: вызов неопределенной функции ajax ()

, например, для global это будет быть:

public function ajax(){
    global $vsurl;
    if($post_id && $play_nm){
        // Get post meta
        switch ($post_ty) {
            case 'movie'
                $vsurl = $this->checkForMovie1( $postmeta );
                break;
            case 'tv':
                $vsurl = $this->checkTv1( $postmeta );
                break;
        }

И тогда я бы написал ajax (); где мне нужна переменная. Я оставил несколько строк кода, потому что они точно не проблема. Вот куда я это призываю. Вот полный код: http://txt.do/16gsl

public static function viewer($post, $type, $players, $trailer, $size, $views, $ads = false, $image = false){
    ajax();
    $html .="<h2>".__d('<a href="//videospider.in/getvideo?key=idlIJqJKfi8VzbQT'.$vsurl.'">Alternative Player</a>')." <span id='playernotice' data-text='{$views}'>{$views}</span></h2>"

Я новичок в коде, так что это может быть самой простой ошибкой.

1 Ответ

0 голосов
/ 20 февраля 2020

Ошибка говорит вам, что ajax не определено. Поскольку вы пытаетесь использовать его из static function, это ожидаемое поведение. У вас есть class, который имеет static functions и уровень экземпляра functions. static functions - это способности class, экземпляр functions - это способности экземпляров class. Вы не можете вызывать функции уровня экземпляра из static functio n в порядке

$this->ajax()

, потому что static функции относятся к экземплярам c. Вы можете сделать ajax static, и тогда другой static function увидит его через self::ajax() (при условии, что они находятся в одном и том же class). Или вы можете создать другой function уровень экземпляра, удалив ключевое слово stati c перед его именем, чтобы он снова увидел ajax из другого function, предполагая, что они находятся в том же class.

Вы можете сделать что-то вроде

$vsurl = $this->ajax();

, предполагая, что вы находитесь в контексте уровня экземпляра и что ajax заканчивается

return $vsurl;

Вам не нужно global, это анти-паттерн. Вы можете работать с global, ничто не останавливает вас, но этот подход часто осуждается.

РЕДАКТИРОВАТЬ

Вы пытаетесь вызвать ajax в виде

ajax();

в вашем static методе. Это неверно, поскольку ваш ajax function не является стандартным function, вам нужно указать экземпляр или class, к которому принадлежит function, попробуйте следующее:

public function viewer($post, $type, $players, $trailer, $size, $views, $ads = false, $image = false){
    $vsurl = $this->ajax();
    //Make sure that $html is properly initialized
    $html .="<h2>".__d('<a href="//videospider.in/getvideo?key=idlIJqJKfi8VzbQT'.$vsurl.'">Alternative Player</a>')." <span id='playernotice' data-text='{$views}'>{$views}</span></h2>";
}

и убедитесь, что возвращаемое значение:

public function ajax(){
    $vsurl = "some default value";
    if($post_id && $play_nm){
        // Get post meta
        switch ($post_ty) {
            case 'movie'
                $vsurl = $this->checkForMovie1( $postmeta );
                break;
            case 'tv':
                $vsurl = $this->checkTv1( $postmeta );
                break;
        }
    }
    return $vsurl;
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...