Переменные переменные кажутся довольно крутыми, но я не могу придумать сценарий, в котором можно было бы использовать их в рабочей среде. Что такое такой сценарий? Как они были использованы?Что такое фактическое использование переменных переменных?
ответ
Его цель, я думаю, заключается в том, чтобы позволить начинающим программистам динамически изменять данные, не используя «сложные вещи», как составные типы (массивы и объекты).
Я никогда их не использую.
Think его для использования в системе шаблонов, где вы используете PHP файлы и нужно установить переменные:
function fetch_template($file, $vars){
$ret = 'File not loaded.';
if(file_exists(TEMPLATE_PATH.$file)){
//could do this with extract() but I am showing you
foreach($vars as $varName => $value){
${$varName} = $value;
}
ob_start();
include(TEMPLATE_PATH.$file);
$ret = ob_get_contents();
ob_end_clean();
}
return $ret;
}
Теперь если вы использовали эти имена переменных в шаблоне, вы могли бы назвать его и пропуск переменные в нее для использования.
echo fetch_template('hi_there.tpl', array('name'=>'JJ'));
Затем в шаблоне:
Hello <?php echo $name; ?>!
То же самое можно сделать с помощью '' extract' '(http://ca.php.net/manual/en/function.extract.php) –
И теперь у вас есть ошибка '$ vars' имеет ключ' файл "'. Вот почему переменные переменные (и 'extract', если на то пошло) опасны. Было бы гораздо труднее использовать что-то вроде '$ m ['var']' в шаблоне? – Artefacto
@ Даниэль: пример кода явно говорит, что это можно сделать с помощью extract(). Это был пример. @Artefecto: это не было сделано для демонстрации безопасности, но вместо этого использование переменных переменных. Я никогда не выступал за переменные вслепую, как в массиве $ _GET. – Jage
Лично я использую их довольно часто. Все вызовы следующих типов использовать различные-переменные:
$foo->$bar = 'test';
$foo->$bar();
$bar();
Так в любое время вы делаете вызов динамический метод/функцию, вы используете переменную-переменные ...
Обычное использование для этого является доступ к защищенным свойствам с помощью магического метода __get
. Я видел довольно часто следующее:
public function __get($name) {
return isset($this->$name) ? $this->$name : null;
}
который по определению использует переменные переменный для обеспечения чтения доступа к защищенным членам ...
Я никогда не использовал непосредственно синтаксис $$var
(и не думаю, что когда-либо буду). Я видел, что он использовал для доступа к глобальным переменным по имени global $$name; echo $$name;
, но то же самое можно сделать с помощью синтаксиса $_GLOBALS[$name]
, так что это не очень хороший прецедент (не говоря уже о том, что использование глобальных переменных обычно рассматривается как плохая практика). .
Это не переменные переменные. Методы не являются переменными. – Artefacto
Хотя они могут быть (вроде), если это будет продолжаться: http://wiki.php.net/rfc/closures/object-extension#status_as_of_august_10_2010 – Artefacto
Это переменная-функция. Ты прав. Он по-прежнему работает с одним и тем же директором (где переменная разыменована для определения пути выполнения) ... – ircmaxell
Я нашел это полезным в одном сценарии. У меня были результаты API YouTube в формате JSON, как этот
$obj->media$title => Video title
Так что я использовал его как
$mt = 'media$title';
$obj->$mt ;
Так он работал для меня здесь :)
Вы можете просто сделать '$ obj -> {'media $ title'}'. – Artefacto
переменная переменная, в сущности массив (карта/словарь). Ниже приведены эквивалентные идеи:
<?php
$foo = array('a' => 1);
$bar = 'a';
echo $foo[$bar]."\n";
$foo_a = 1;
$bar = 'a';
$vv = "foo_$bar";
echo $$vv."\n";
?>
Таким образом, если вы оберните ваши «переменные переменные» в родительский массив, вы можете избавиться от них.
Я видел, как люди используют свойства переменных внутри классов:
<?php
class Foo
{
private $a = 1;
public function __get($key)
{
if (isset($this->$key)) return $this->$key;
}
}
$foo = new Foo();
echo $foo->a;
?>
Но опять же, вы можете использовать массив:
<?php
class Foo
{
private $props = array('a' => 1);
public function __get($key)
{
if (array_key_exists($key, $this->props))
return $this->props[$key];
}
}
$foo = new Foo();
echo $foo->a;
?>
и вне класса:
<?php
class Foo
{
public $a = 1;
}
$foo = new Foo();
$prop = 'a';
echo $foo->{$prop};
?>
Так вы никогда не «имеете» использовать переменные переменные или свойства переменной при написании собственного управляемого кода. Мои личные предпочтения - никогда не использовать переменные переменные. Я иногда использую переменные свойства, но предпочитаю использовать массивы, когда я буду обращаться к данным таким образом.
основном я использую его, чтобы уменьшить копировать-вставить в дезинфицирующий прибудете/размещают данные в начале файла PHP: Это делает продезинфицировать переменные с именами:
$fields=array('age','name','gender','email','username');
foreach($fields as $field) {
if (empty($_REQUEST[$field] === false)
${$field} = sanitize($_REQUEST[$field]);
else
${$field} = '';
}
вместо всех этих строк:
if (empty($_GET['age']) === false)
$age= sanitize($_GET['age']);
else
$age= '';
if (empty($_GET['name']) === false)
$name= sanitize($_GET['name']);
else
$name = '';
if (empty($_GET['gender']) === false)
$gender= sanitize($_GET['gender']);
else
$gender= '';
if (empty($_GET['email']) === false)
$email= sanitize($_GET['email']);
else
$email= '';
if (empty($_GET['username']) === false)
$username= sanitize($_GET['username']);
else
$username= '';
Я надеюсь, что это помогает
Почему не просто 'array_map'? – user151841
- 1. что такое? на groovy переменных?
- 2. Что такое имена переменных аналитики?
- 3. Что такое фактическое использование rundll32.exe?
- 4. Что такое фактическое использование дерева в Java
- 5. Что такое фактическое использование SVN в mergeinfo?
- 6. Использование переменных переменных бритвы
- 7. Замените держатели переменных переменных среды на их фактическое значение?
- 8. Использование переменных переменных (varargs) java
- 9. Использование переменных $ sign в переменных
- 10. Использование переменных в устанавливающих переменных
- 11. Что такое использование статических переменных внутри функций C?
- 12. Что этот вид переменных переменных $
- 13. Что такое набор глобальных переменных CouchDB?
- 14. Что такое? в декларации переменных JSX React?
- 15. Что такое состояние переменных по умолчанию?
- 16. Что такое действительные символы в переменных Jenkins?
- 17. Что такое допустимые типы переменных регистров
- 18. Что такое привязка переменных и спецификатор хранилища?
- 19. Что такое «карта» в терминах Ansible переменных?
- 20. Prolog: что такое префикс в предикатах/переменных?
- 21. Что такое имена таблиц переменных woocommerce
- 22. Использование переменных
- 23. Использование переменных переменных PHP в SQL-запросе
- 24. Can Getopt :: Долгое использование имен переменных переменных?
- 25. Jekyll: использование переменных в определении других переменных
- 26. Что касается статических переменных
- 27. Использование переменных переменных в простой функции PHP
- 28. Использование переменных для GET
- 29. Проблема переменных переменных php
- 30. Использование переменных в PostCSS
// позволяют начинающим программистам динамически изменять данные без использования «сложные вещи» как составных типов (массивы и объекты) // Это не сложно, как только вы узнали. – dreftymac
Я думаю, что это смысл цитат. – user151841
Как этот ответ получил так много раз и принял? – jasonszhao