Как изменить константы PHP? - PullRequest
5 голосов
/ 29 января 2012

Я работаю над созданием своей собственной CMS на PHP вручную, и у меня есть несколько констант, которые я определил. Есть ли простой способ изменить константы? Я думал о том, чтобы использовать что-то вроде fopen(), а затем изменить его, но я никогда не использовал функции файловой системы.

Ответы [ 8 ]

26 голосов
/ 29 января 2012

Константа - это идентификатор (имя) для простого значения. Как следует из названия, это значение не может измениться во время выполнения скрипта (за исключением магических констант, которые на самом деле не являются константами).Константа чувствительна к регистру по умолчанию.По соглашению, идентификаторы констант всегда в верхнем регистре.

Имя константы следует тем же правилам, что и любая метка в PHP.Допустимое имя константы начинается с буквы или подчеркивания, за которым следует любое количество букв, цифр или подчеркивания.Как регулярное выражение, оно будет выражаться так: [a-zA-Z_ \ x7f- \ xff] [a-zA-Z0-9_ \ x7f- \ xff] *

из: http://php.net/manual/en/language.constants.php

15 голосов
/ 29 января 2012

Константы являются константами и поэтому не могут быть изменены. Если вы хотите изменить серверные константы, такие как allow_url_fopen, то есть ответственность хоста, спросите их. Если вы хотите изменить их в PHP, используйте переменные

UPDATE

В случае, если Корбин говорит правду, и вы хотите изменить их при установке, вам нужно сделать следующее: 0. Измените значения констант на sg. как %%constant1. 1. прочитать код в переменную. 2. Позвольте пользователю установить переменные. 3. Используйте str_replace на всех из них, например str_replace ("%% constant1", $ _ POST ["value1"], $ configfile). 4. Поместите $ configfile как содержимое файла.

ОБНОВЛЕНИЕ 2

Только для вашей собственной CMS, я предлагаю следующее: хранить все константы в одном файле, поэтому вам нужно будет редактировать только один файл. И, возможно, предыдущее решение могло бы работать для более простого редактирования, но IDK, если оно того стоит.

14 голосов
/ 29 января 2012

Нет. Это константы , как в " константе - то, что является постоянным или неизменным" (Викисловарь). Как только они определены, их невозможно изменить. Цитировать Прекрасное руководство , раздел Константы:

Значение [константы] не может измениться во время выполнения скрипта.

6 голосов
/ 29 января 2012

Нет. Вы не можете изменять константы

1 голос
/ 22 июля 2014
in PHP, but only if you have the runkit extension installed.

However, I must question why you're even defining a constant if you need to change it.  It would no longer be a constant once changed and it's appropriate to use constants in your context if it needs to be changed.  You may want to consider making it a global variable if it needs to be accessible in other functions or parts of your code, or write proper code by:
Passing the data as parameters to a function, then returning the manipulated values (if coding in a procedural fashion).
Set the value in a class' property, then access the value using $this within your class (if coding in an OO fashion).
0 голосов
/ 11 февраля 2012

Я думаю, что он имеет в виду сценарий установщика, где он хочет сохранить входную переменную в файле конфигурации, который будет использоваться в его CMS, после завершения установки.В этом случае он не меняет константу во время выполнения.

он, вероятно, получил файл, подобный этому:

define(DB, '');
define(USER, '');
define(PASS, '');
define(HOST, '');

И он хочет создать скрипт, который заполняет эти константы данными, чтобыиспользоваться в CMS.

0 голосов
/ 29 января 2012

Константы означает, что значение является константой, поэтому вы не можете изменять константы.Если вы измените константы, вам нужно использовать переменные в состоянии констант:

define('ROOT', '/some/path');
echo ROOT; // echo's /some/path
define('ROOT', '/some/other/path'); // gives an error
echo ROOT; // gives /some/path (if there were no error

$root = '/some/path';
echo $root; // echo's /some/path
$root = '/some/other/path';
echo $root; // echo's /some/other/path
0 голосов
/ 29 января 2012

Насколько я знаю, однажды установленная константа не может быть изменена.

...