Глобальные переменные PHP

  • Автор темы Автор темы Adamastor
  • Дата начала Дата начала

Adamastor

Client
Регистрация
15.05.2016
Сообщения
282
Реакции
14
Баллы
18
Здравствуйте уважаемые форумчане и администрация!

Не могу понять что именно я делаю не так. Итак объяснюсь.

В своем проекте на ПХП я делаю некие публичные функции которые само собой пользуются переменными "$instance, $project, $tab" и другими.

Для того чтобы каждый раз не передавать истанс или проект или таб в значениях функций я попытался пометить "$instance, $project, $tab" как глобальные переменные. То есть для того чтобы не делать вот так:
public function TypeIn($instance, $text){
$instance->SendText($text, 0);
}
Я сделал вот так:

public function TypeIn($text){
global $instance;
$instance->SendText($text, 0);
}

В коде же "public static function Execute($instance, $project){}" есть строка "global $instance, $project, $tab;"

Проблема в том что когда я так делаю то выражения типа "$project->SendInfoToLog($res, true);" именно в "public static function Execute($instance, $project){}" перестают работать. Когда же я уберу из строки "global $instance, $project, $tab;" $project, то все начинает работать.

Как быть подскажите пожалуйста.

Благодарю за внимание! С уважением, Олег.
 
Ремарочка ***Когда же я уберу из строки "global $instance, $project, $tab;" $project, то все начинает работать.*** -- Когда же я уберу из строки "global $instance, $project, $tab;" $project, то все начинает работать в "public static function Execute($instance, $project){}", но не в других функциях.
 
Некорректно объявляете переменную. Не получится так работать.
Нужно объявлять публичную переменную в этом классе - https://help.zennolab.com/en/v5/zennoposter/5.10.3/webframe.html#topic4.html
А потом вызывать ее через Project>Instance в нужных методах.
 
  • Оценить
Реакции: Adamastor
Понял, попробую. Спасибо за ответ.
 
Некорректно объявляете переменную. Не получится так работать.
Нужно объявлять публичную переменную в этом классе - https://help.zennolab.com/en/v5/zennoposter/5.10.3/webframe.html#topic4.html
А потом вызывать ее через Program>Instance в нужных методах.
Я вот все пытаюсь и не могу понять как всеже правильно.

class Program implements ZennoLab\CommandCenter\IZennoCustomCode, ZennoLab\CommandCenter\IZennoCustomEndCode{
global $m;
}

Если вот так писать - то матерится мол неизвестная запись "global"


class Program implements ZennoLab\CommandCenter\IZennoCustomCode, ZennoLab\CommandCenter\IZennoCustomEndCode{

public function ExecuteCode($instance, $project)
{
global $tab, $instance, $project;
}
}

Если вот так писать, то ничего не изменяется. Работать не будет.


В общем, куда вам можно скинуть проект чтобы вы смогли посмотреть. Он предельно примитивен (все лишнее отводящее глаза убрал).
 
Некорректно объявляете переменную. Не получится так работать.
Нужно объявлять публичную переменную в этом классе - https://help.zennolab.com/en/v5/zennoposter/5.10.3/webframe.html#topic4.html
А потом вызывать ее через Program>Instance в нужных методах.
http://file.sampo.ru/tgk44t/ -- Вот частичка моего проекта в которой ошибка. Буду весьма признателен если вы его посмотрите.

Проблема в том чтобы в функции можно было использовать глобальную переменную, например $project.

P.S. Насколько я понимаю если я в ЗенноПостере запущу несколько потоков, то каждый из потоков отдельно получит свою переменную $project. То есть $project первого потока никоим образом не будет пересекатся с $project второго? Извините за, возможно, столь глупый вопрос, просто на данный момент у меня лицензия на один поток и как многопоток работает на деле я не видел.
 
Некорректно объявляете переменную. Не получится так работать.
Нужно объявлять публичную переменную в этом классе - https://help.zennolab.com/en/v5/zennoposter/5.10.3/webframe.html#topic4.html
А потом вызывать ее через Program>Instance в нужных методах.
Уже повторно все перепробовал и все же ничего путевого не добился.

Кроме переменной-объекта $project желательно и такие переменные как расположение мыши передавать в функции, да еще и возвращать их оттуда. Глобальные переменные идеальный выход решения проблемы вместо того чтобы все это передавать в функцию в качестве параметра, а потом как-то возвращать их оттуда.

Помогите пожалуйста.
 
Хорошо, посмотрим ваш проект.
 
P.S. Насколько я понимаю если я в ЗенноПостере запущу несколько потоков, то каждый из потоков отдельно получит свою переменную $project. То есть $project первого потока никоим образом не будет пересекатся с $project второго? Извините за, возможно, столь глупый вопрос, просто на данный момент у меня лицензия на один поток и как многопоток работает на деле я не видел.
Разработчики посмотрели ваш пример. К сожалению, на PHP не получится использовать глобальную переменную так как вы хотите.
Поэтому все также актуальна моя первая рекомендация - http://zennolab.com/discussion/threads/globalnye-peremennye-php.34923/#post-259741
 
Разработчики посмотрели ваш пример. К сожалению, на PHP не получится использовать глобальную переменную так как вы хотите.
Поэтому все также актуальна моя первая рекомендация - http://zennolab.com/discussion/threads/globalnye-peremennye-php.34923/#post-259741
А в С# получится?
 
глобальная из общего кода

В принципе все тоже самое применяется и для PHP.


class NewClass
{
public function SendInfoToLog($log){
GV::$proj->SendInfoToLog($log, true);
return 1;
}


public static function Execute($instance, $project)
{
$sep_row = '**';
$sep_col = '||';
$tab = $instance->ActiveTab;
GlobVar::$proj = $project;

NewClass::SendInfoToLog($sep_row);

}
}

class GV
{
public static $proj;
public static $inst;
public static $mouse_x;
}
 
Опечатался, не "GlobVar::$proj = $project;", а "GV::$proj = $project;" конечно.
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)