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

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, то все начинает работать.

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

Благодарю за внимание! С уважением, Олег.
 

Adamastor

Client
Регистрация
15.05.2016
Сообщения
282
Благодарностей
14
Баллы
18
Ремарочка ***Когда же я уберу из строки "global $instance, $project, $tab;" $project, то все начинает работать.*** -- Когда же я уберу из строки "global $instance, $project, $tab;" $project, то все начинает работать в "public static function Execute($instance, $project){}", но не в других функциях.
 

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 453
Благодарностей
5 913
Баллы
113
Некорректно объявляете переменную. Не получится так работать.
Нужно объявлять публичную переменную в этом классе - https://help.zennolab.com/en/v5/zennoposter/5.10.3/webframe.html#topic4.html
А потом вызывать ее через Project>Instance в нужных методах.
 
  • Спасибо
Реакции: Adamastor

Adamastor

Client
Регистрация
15.05.2016
Сообщения
282
Благодарностей
14
Баллы
18
Понял, попробую. Спасибо за ответ.
 

Adamastor

Client
Регистрация
15.05.2016
Сообщения
282
Благодарностей
14
Баллы
18
Некорректно объявляете переменную. Не получится так работать.
Нужно объявлять публичную переменную в этом классе - 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;
}
}

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


В общем, куда вам можно скинуть проект чтобы вы смогли посмотреть. Он предельно примитивен (все лишнее отводящее глаза убрал).
 

Adamastor

Client
Регистрация
15.05.2016
Сообщения
282
Благодарностей
14
Баллы
18
Некорректно объявляете переменную. Не получится так работать.
Нужно объявлять публичную переменную в этом классе - 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 второго? Извините за, возможно, столь глупый вопрос, просто на данный момент у меня лицензия на один поток и как многопоток работает на деле я не видел.
 

Adamastor

Client
Регистрация
15.05.2016
Сообщения
282
Благодарностей
14
Баллы
18
Некорректно объявляете переменную. Не получится так работать.
Нужно объявлять публичную переменную в этом классе - https://help.zennolab.com/en/v5/zennoposter/5.10.3/webframe.html#topic4.html
А потом вызывать ее через Program>Instance в нужных методах.
Уже повторно все перепробовал и все же ничего путевого не добился.

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

Помогите пожалуйста.
 

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 453
Благодарностей
5 913
Баллы
113
Хорошо, посмотрим ваш проект.
 

Adamastor

Client
Регистрация
15.05.2016
Сообщения
282
Благодарностей
14
Баллы
18

VladZen

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

Adamastor

Client
Регистрация
15.05.2016
Сообщения
282
Благодарностей
14
Баллы
18
Разработчики посмотрели ваш пример. К сожалению, на PHP не получится использовать глобальную переменную так как вы хотите.
Поэтому все также актуальна моя первая рекомендация - http://zennolab.com/discussion/threads/globalnye-peremennye-php.34923/#post-259741
А в С# получится?
 

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 453
Благодарностей
5 913
Баллы
113

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
Последнее редактирование:
  • Спасибо
Реакции: Adamastor и VladZen

Adamastor

Client
Регистрация
15.05.2016
Сообщения
282
Благодарностей
14
Баллы
18
глобальная из общего кода
В принципе все тоже самое применяется и для 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;
}
 

Adamastor

Client
Регистрация
15.05.2016
Сообщения
282
Благодарностей
14
Баллы
18
Опечатался, не "GlobVar::$proj = $project;", а "GV::$proj = $project;" конечно.
 

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