В моих собственных выводах я считаю, что полезно отметить, что вы (насколько я могу судить) должны объявить полный путь пространства имен для класса.
MyClass.php
namespace com\company\lib;
class MyClass {
}
index.php
namespace com\company\lib;
//Works fine
$i = new MyClass();
$cname = 'MyClass';
//Errors
//$i = new $cname;
//Works fine
$cname = "com\\company\\lib\\".$cname;
$i = new $cname;
Можно получить системные переменные с vbs сценарием, но Вам нужен bat сценарий для фактического изменения текущих переменных среды, таким образом, это - комбинированное решение.
Создают файл, названный resetvars.vbs
содержащий этот код, и сохраняют его на пути:
Set oShell = WScript.CreateObject("WScript.Shell")
filename = oShell.ExpandEnvironmentStrings("%TEMP%\resetvars.bat")
Set objFileSystem = CreateObject("Scripting.fileSystemObject")
Set oFile = objFileSystem.CreateTextFile(filename, TRUE)
set oEnv=oShell.Environment("System")
for each sitem in oEnv
oFile.WriteLine("SET " & sitem)
next
path = oEnv("PATH")
set oEnv=oShell.Environment("User")
for each sitem in oEnv
oFile.WriteLine("SET " & sitem)
next
path = path & ";" & oEnv("PATH")
oFile.WriteLine("SET PATH=" & path)
oFile.Close
создают другое имя файла resetvars.bat, содержащий этот код, то же местоположение:
@echo off
%~dp0resetvars.vbs
call "%TEMP%\resetvars.bat"
, Когда Вы захотите обновить переменные среды, просто работайте resetvars.bat
Апологетика :
Эти две основных проблемы у меня было предложение этого решения, были
a. я не мог найти простой способ экспортировать переменные среды из vbs сценария назад к командной строке, и
b. переменная окружения PATH является конкатенацией пользователя и системных переменных ПУТИ.
я не уверен, что общее правило для конфликтующих переменных между пользователем и системой, таким образом, я выбрал делать пользовательскую систему переопределения, кроме переменной ПУТИ, которая обрабатывается конкретно.
я использую странный vbs+bat+temporary bat механизм для работы вокруг проблемы экспорта переменных от vbs.
Примечание : этот сценарий не удаляет переменные.
Это может, вероятно, быть улучшено.
ДОБАВИЛ
, Если необходимо экспортировать среду от одного cmd окна до другого, используйте этот сценарий (давайте назовем его exportvars.vbs
):
Set oShell = WScript.CreateObject("WScript.Shell")
filename = oShell.ExpandEnvironmentStrings("%TEMP%\resetvars.bat")
Set objFileSystem = CreateObject("Scripting.fileSystemObject")
Set oFile = objFileSystem.CreateTextFile(filename, TRUE)
set oEnv=oShell.Environment("Process")
for each sitem in oEnv
oFile.WriteLine("SET " & sitem)
next
oFile.Close
Выполнение exportvars.vbs
в окне Вы хотите экспортировать от [1 128], затем переключиться на окно, которое Вы хотите экспортировать в [1 129], и тип:
"%TEMP%\resetvars.bat"
Дизайном нет созданы в , механизм для Windows для распространения переменной среды добавляет/изменяет/удаляет к уже под управлением cmd.exe, или из другого cmd.exe или от "Моего Компьютера-> Свойства-> Расширенные настройки-> Переменные среды".
, Если Вы изменяете или добавляете новую переменную среды за пределами объема существующей открытой командной строки, или необходимо перезапустить командную строку, или, вручную добавить НАБОР использования в существующей командной строке.
последний принятый ответ шоу частичное обходное решение путем ручного обновления весь переменные среды в сценарии. Сценарий обрабатывает вариант использования переменных изменяющей среды глобально в "Моем Компьютере... Переменные среды", но если переменная среды изменяется в одном cmd.exe сценарий, не распространят его к другому под управлением cmd.exe.
нет, я не думаю так..., что можно установить их вручную все же. Таким образом, можно поместить их в пакетный файл или что-то.
, вероятно, мог сделать утилиту/сценарий (если кто-то уже не имеет), который запрашивает реестр и устанавливает текущую среду, чтобы быть тем же
Нет никакого прямого пути, как заявил Kev. В большинстве случаев более просто породить другое поле CMD. Более раздражающе запускающие программы не знают об изменениях ни один (хотя IIRC, там могло бы быть широковещательное сообщение для наблюдения, чтобы быть уведомленным относительно такого изменения).
Это было хуже: в более старых версиях Windows необходимо было выйти из системы, тогда входят для взятия в учетной записи изменений...
Если просто необходимо обновить переменные окружения в окнах выполненный refreshenv от терминала, чем перезагрузить ПК.
У меня сработал вызов этой функции:
VOID Win32ForceSettingsChange()
{
DWORD dwReturnValue;
::SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM) "Environment", SMTO_ABORTIFHUNG, 5000, &dwReturnValue);
}