PHP Convert String в массив или объект, если он представляет один - PullRequest
0 голосов
/ 17 февраля 2011

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

Возможно ли для этой функции интерпретировать строки, такие как "array[0]" и "object.something", и возвращать это значение вместо поиска значения в качестве индекса в $this

1008 * Е.Г. *

private array = array("stuff");

$this->printValue("string");   
$this->printValue("array[0]");
$this->printValue("object.name"); //Some specified object

public function printValue($key) {
    if(isset($this->$key)) {
        echo $this->$key;
    } else {
        die($key.' doesn\'t exist');    
    }
}

Будет эхом:

string
stuff
thename

Ответы [ 3 ]

0 голосов
/ 17 февраля 2011

Может быть, этот пример помогает:

class Example {
    public function __construct() {
        $this->foo = array(9, 8, 7);
        $this->bar = (object) array('attr1' => 'val1', 'attr2' => 'val2');
        $this->baz = 'abcde';
    }
    public function printValue($key) {
        echo eval('return $this->' . $key . ';') . "\n";
    }
}

$example = new Example();
$example->printValue('foo[0]'); # prints 9
$example->printValue('bar->attr1'); # prints val1
$example->printValue('baz'); # prints abcde

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

0 голосов
/ 22 августа 2014

я не уверен, но я думаю, что вы хотите $pie = print_r($var,true) он отправляет строку в качестве возвращаемого значения, не распечатывая

0 голосов
/ 17 февраля 2011

Я думаю, что главный вопрос в том, пытаетесь ли вы использовать array[0] в качестве индекса для чего-то, на что вы пытаетесь сослаться? Я предполагаю, что в противном случае вы могли бы получить доступ к данным из этих пунктов в списке. Итак, если вы хотите использовать array[0] в качестве индекса-идентификатора, то вы можете сделать что-то вроде:

private data_array['array[0]'] = "stuff"; 
$this->printValue(data_array['array[0]']);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...