Вывод формата var_export оценивает текстовую переменную, если она соответствует типу - PullRequest
0 голосов
/ 04 октября 2019

вывод выводится в документе protectec, я могу его скопировать, но скрипт переносится в песочницу: https://wtools.io/php-sandbox/biCw

https://wtools.io/php-sandbox/biC6 //with Object Class

у меня естьСлейте пару скриптов, которые найдете в интернете. и получить эту две функции:

это, чтобы получить тип переменной, переданной, но не работающей правильно

private function GetType($var) {
    if (is_array($var)) {
        return "array";
    }

    if (is_bool($var)) {
        return "boolean";
    }

    if (is_float($var)) {
        return "float";
    }

    if (is_int($var)) {
        return "integer";
    }

    if (is_null($var)) {
        return "NULL";
    }

    if (is_numeric($var)) {
        return "numeric";
    }

    if (is_object($var)) {
        return "object";
    }

    if (is_resource($var)) {
        return "resource";
    }

    if (is_string($var)) {
        return "string";
    }

    return "unknown";
}

эта функция для анализа и форматирования var_export выходной текст:

private function VarExportFormat($Var) {
    $textvar    = '';
    $textvar    = var_export($Var, true);
    $textvar    = preg_replace("/^([ ]*)(.*)/m", '$1$1$2', $textvar);
    $textvarArr = preg_split("/\r\n|\n|\r/", $textvar);
    foreach ($textvarArr as $key => $value) {
        preg_match('~=>\\s(.*?),~', $value, $newvalue);
        if (!empty($newvalue)) {
            $newvalue[1] = str_replace("'", "", $newvalue[1]);
            $typeval=$this->GetType($newvalue[1]);
            $value = str_replace("=> ", "=> ".$typeval.'('.strlen($newvalue[1]).') ', $value);
            $textvarArr[$key]=$value;
        }
    }
    $textvarArr = preg_replace(["/\s*array\s\($/", "/\)(,)?$/", "/\s=>\s$/"], [NULL, ']$1', ' => array ['], $textvarArr);
    $textvar    = join(PHP_EOL, array_filter(["array ["] + $textvarArr));
    if (substr($textvar, -1) == '[') {
        echo var_dump($textvar);
        $textvar = str_replace("[", "[]", $textvar);
    }
    $textvar = highlight_string("<?php \n#output of Variable:\n" . $textvar . ";\n?>", true);
    return $textvar;
}

и get и output следующим образом, с типом массива:

Первый просмотр Aftr Редактирование скрипта

<?php
#output de la Variable Solicitada:
array [
    'SIS' => array [
        'ABS' => array [
            'DATA' => array [
            ],
            'LIST' => array [
            ],
        ],
        'HTTPR' => array [
            'HTTPST' => true,
            'HTTPM' => 'POST',
            'PROTOCOL' => 'HTTP',
            'CHECK' => false,
            'JSON' => array [
                'CHECK' => 'MIX',
            ],
        ],

текущий вывод со всеми правками:

<?php
#output of Variable:
array [
    'SIS' => array [
        'ABS' => array [
            'DATA' => array [
            ],
            'LIST' => array [
            ],
        ],
        'HTTPR' => array [
            'HTTPST' => string(4) true,
            'HTTPM' => string(4) 'POST',
            'PROTOCOL' => string(4) 'HTTP',
            'CHECK' => string(5) false,
            'JSON' => array [
                'CHECK' => string(3) 'MIX',
            ],
        ],
        'ERROR' => array [
            'TYPE' => string(4) NULL,
        ],
        'MAIL' => array [
            'TRACK' => array [
                'SMG' => string(4) NULL,
            ],
        ],
        'IDFORM' => string(10) 'f-sis-0320',
        'PROCESS' => string(6) 'p-test',
        'EXECTIMEUSAGE' => array [
            'STANDBY' => numeric(18) -1570214309.358045,
        ],
        'MEMORYUSAGE' => array [
            'STANDBY' => numeric(4) '1.63',
            'STANDBYTXT' => string(7) '1.63 Mb',
        ],

Как я могу получить типы существующих типов в строке и поместить их в вывод, как он выходит. оно предназначено для разработки.

True оценивается как String, а Float как числовое.

1 Ответ

0 голосов
/ 04 октября 2019

Я решил эту проблему:

<?php
#Variable:

$Test                            = [];
$Test['Check1']                  = null;
$Test['Check2']                  = [];
$Test['Check2']['int']           = 20;
$Test['Check2']['float']         = 20.35;
$Test['Check2']['string']        = 'Hello World';
$Test['Check2']['bolean']        = true;
$Test['Check2']['array']         = [];
$Test['Check2']['array']['data'] = 'Array Text';
class Example {
    function foo_function() {
        return "Hello World! Object";
    }
}
$var_object                         = new Example;
$Test['Check2']['array']['object']  = $var_object;
$Test['Check2']['array']['object2'] = $var_object->foo_function();

#Script Type:
function myGetType($var) {
    if (is_array($var)) {
        return "array";
    }

    if (in_array($var, array("true", "false"), true)) {
        return "boolean";
    }

    if ((int) $var == $var && is_numeric($var)) {
        return "integer" . '(' . strlen($var) . ')';
    }

    if ((float) $var == $var && is_numeric($var)) {
        return "float" . '(' . strlen($var) . ')';
    }

    if (is_null($var)) {
        return "NULL";
    }

    if (is_object($var)) {
        return "object";
    }

    if (is_resource($var)) {
        return "resource";
    }

    if (is_string($var)) {
        return "string" . '(' . strlen($var) . ')';
    }

    return "unknown";
}

#Script Analisis:
function VarExportFormat($Var) {
    $textvar    = '';
    $textvar    = var_export($Var, true);
    $textvar    = preg_replace("/^([ ]*)(.*)/m", '$1$1$2', $textvar);
    $textvarArr = preg_split("/\r\n|\n|\r/", $textvar);
    # Analisis del tipo.
    foreach ($textvarArr as $key => $value) {
        preg_match('~=>\\s(.*?),~', $value, $newvalue);
        if (!empty($newvalue)) {
            $newvalue[1]      = str_replace("'", "", $newvalue[1]);
            $typeval          = myGetType($newvalue[1]);
            $value            = str_replace("=> ", "=> " . $typeval . ' ', $value);
            $textvarArr[$key] = $value;
        }
    }
    $textvarArr = preg_replace(["/\s*array\s\($/", "/\)(,)?$/", "/\s=>\s$/"], [NULL, ']$1', ' => array ['], $textvarArr);
    $textvar    = join(PHP_EOL, array_filter(["array ["] + $textvarArr));
    if (substr($textvar, -1) == '[') {
        $textvar = str_replace("[", "[]", $textvar);
    }
    $textvar = highlight_string("<?php \n#output of Variable:\n" . $textvar . ";\n?>", true);
    return $textvar;
}

echo VarExportFormat($Test);

Ссылка на тестовую песочницу:

https://wtools.io/php-sandbox/biDk

если обнаружите какие-либо проблемы, пожалуйста, оставьте комментарий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...