Разрешение trim() ожидает по крайней мере 1 параметр, 0, указанный в файле функций divi

#php #wordpress #divi

Вопрос:

На сайте wordpress, созданном с помощью divi, в functions.php файле в папке divi theme includes builder я получаю прерывистую ошибку в строке:

$value = substr( $value, 1, $value_length ) . trim();

Ошибка гласит Warning: trim() expects at least 1 parameter, 0 given

Это потому, что внутри ничего нет? Но приковывание его вот так на конце должно относиться к тому, к чему он прикован, верно? Так substr что оф $value . Означает ли это, что $value этого просто не дано? Или что, когда ты получаешь substr , там больше ничего нет?

Хотел бы использовать консоль javascript.войдите в журнал, чтобы посмотреть, что на самом деле там сейчас 😀 . Существует ли эквивалент php? Или какой-то плагин для php для инструментов разработки, где я могу видеть переменные в любой момент?

Кто-нибудь знает, в чем здесь проблема? Я даже не уверен, что этот фрагмент кода делает в данный момент, что-то связанное с установкой значения css px для некоторого текста, я предполагаю…, и удалением !important свойства?

 if ( ! function_exists( 'et_pb_get_value_unit' ) ) :
    /**
     * Get unit of given value
     *
     * @param string $value string with unit.
     * @param string $default_unit default unit.
     *
     * @return string unit name
     */
    function et_pb_get_value_unit( $value, $default_unit = 'px' ) {
        $value                   = isset( $value ) ? $value : '';
        $valid_one_char_units    = array( '%', 'x' );
        $valid_two_chars_units   = array( 'em', 'px', 'cm', 'mm', 'in', 'pt', 'pc', 'ex', 'vh', 'vw', 'ms' );
        $valid_three_chars_units = array( 'deg', 'rem' );
        $important               = '!important';
        $important_length        = strlen( $important );
        $value_length            = strlen( $value );

        if ( '' === $value || is_numeric( $value ) ) {
            return $default_unit;
        }

        if ( substr( $value, ( 0 - $important_length ), $important_length ) === $important ) {
            $value_length = $value_length - $important_length;
            $value        = substr( $value, 1, $value_length ) . trim();
        }

        if ( in_array( substr( $value, -3, 3 ), $valid_three_chars_units, true ) ) {
            return substr( $value, -3, 3 );
        }

        if ( in_array( substr( $value, -2, 2 ), $valid_two_chars_units, true ) ) {
            return substr( $value, -2, 2 );
        }

        if ( in_array( substr( $value, -1, 1 ), $valid_one_char_units, true ) ) {
            return substr( $value, -1, 1 );
        }

        return $default_unit;
    }
endif;
 

Комментарии:

1. Это довольно самоочевидно! Измените его на $value = trim(substr( $value, 1, $value_length )); . Ты работаешь с php не javascript !

2. @Ruvee Спасибо, я подумал, что это вероятная проблема. Из того, что я могу сказать, это ошибка в профессиональном конструкторе тем wordpress divi , поэтому меня шокирует, что 1)ошибка существует, и 2) когда я гуглю ошибку, ничего не появляется. Можно подумать, что об этой проблеме уже писали в Интернете раньше.

3. Нет проблем! Ну, не уверен, я не использовал divi или какие-либо другие конструкторы тем. Я пишу свои собственные темы, но ошибка заключалась в том, чтобы точно сказать вам, что происходит. Не знаю, почему разработчики тем написали такой синтаксис.

Ответ №1:

Подобная цепочка является особенностью других языков (например, JavaScript), однако она не является особенностью PHP. Как написано, вы «соединяете «»обрезанное null «» в конце значения, что на самом деле не имеет смысла.

Взгляните на trim() документацию функции — string аргумент необходим, чтобы он знал, что обрезать.

Если бы вы хотели «связать» таким образом, вам действительно нужно было бы охватить значение trim примерно так:

 $value = trim( substr( $value, 1, $value_length ) );
 

Вы можете увидеть «цепные» функции, подобные тем, которые называются «вложенными» в том, что касается PHP.

Что касается того, что делает код, это относительно сложный способ возврата типа единицы измерения из значения — вероятно, для того, чтобы проверить, является ли это rem px , % — и т. Д. Для использования в других вычислениях в других местах. Это можно было бы немного упростить ( возможно, одну строку с регулярным выражением), но это выходит за рамки данного вопроса