Вызов метода класса

81
18 октября 2021, 21:40

Есть 3 файла. index.php

include "func.php";
$vk = new vk_api(VK_KEY, VERSION);
$vk->sendOK(); 
...
$testq = ttt($peer_id, $message);

func.php

include "api/vk_api.php"; 
function ttt($peer_id, $text)
{
    $t = $vk->sendMessage($peer_id, $text);
}

vk_api.php

class vk_api
{
    public function sendMessage($sendID, $message){
        if (!empty($sendID)) {
            return $this->request($this->token, 'messages.send', array('message'=>$message, 'peer_id'=>$sendID, 'random_id'=>rand(1, 2147483600)));
        } else {
            return true;
        }
    }
 }

Но request в sendMessage почему то не вызывается, больше того, останавливается дальнейшее выполнение кода.

Если же вызывать напрямую из файла index.php

$vk = new vk_api(VK_KEY, VERSION);
$vk->sendOK(); 
...
$vk->sendMessage('123', 'test'); 

То все работает. В чем может быть проблема? Как правильно вызывать методы класса из функции другого файла?

Answer 1

Все переменные в php по умолчанию являются локальными, и не могут быть использованы в пользовательских функциях. Чтобы избавится от этого нужно сделать эту переменную глобальной:

func.php

include "api/vk_api.php"; 
function ttt($peer_id, $text)
{
    global $vk;
    $t = $vk->sendMessage($peer_id, $text);
}

Так же, вы можете передавать эту переменную в функцию. Тогда код будет выглядеть как-то так:

index.php

include "func.php";
$vk = new vk_api(VK_KEY, VERSION);
$vk->sendOK(); 
...
$testq = ttt($peer_id, $message, $vk);

func.php

include "api/vk_api.php"; 
function ttt($peer_id, $text, $vk)
{
    $t = $vk->sendMessage($peer_id, $text);
}
READ ALSO
Parse error: syntax error, unexpected '[', expecting ')'

Parse error: syntax error, unexpected '[', expecting ')'

Ошибка: Parse error: syntax error, unexpected '[', expecting ')' in Z:\home\localhost\www\jekaua\config\questions

205
Как добавить блок с кодом на страницу wordpress?

Как добавить блок с кодом на страницу wordpress?

У меня есть таблица, как можно добавлять поле в редакторе страницы, и изменять ссылки в новом поле? Просто добавить запись нельзя тк добавление...

112
Помочь Переделать запрос к бд

Помочь Переделать запрос к бд

имеется вот такой запрос к базе данных

248
После include header.html появилась 1!

После include header.html появилась 1!

Дабы сократить время верстки множества страниц решил вынести header в отдельный файл, чтобы в indexphp и других страницах призывать его через include

191