Вызвать PHP к ошибке на незаявленных переменных? В объектах?

Вам не хватает преобразования данных изображения LabVIEW в более общий формат изображения, который будет понят за пределами контекста LabVIEW, например, с помощью инструмента CodeBeautify. Все, что вам нужно сделать, это преобразовать данные изображения с помощью LV Image в PNG Data.VI в PNG, прежде чем кодировать его.

Используя приведенный ниже пример, если я возьму вывод кодированной строки base64 и использую инструмент CodeBeautify base64-to-image-converter , он покажет ожидаемое изображение.

Example

7
задан pek 28 December 2008 в 21:06
поделиться

7 ответов

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

<?php

error_reporting( E_ALL | E_STRICT );

class Joe {
    public $lastName;

    public function __set( $name, $value ) {
        if ( !property_exists( $this, $name ) ) {
            trigger_error( 'Undefined property via __set(): ' . $name, E_USER_NOTICE );
            return null;
        }
        $this->$name = $value;
    }

    public function __get( $name ) {
        if ( !property_exists( $this, $name ) ) {
            trigger_error( 'Undefined property via __get(): ' . $name, E_USER_NOTICE );
            return null;
        }
        return $this->$name;
    }
}

$joe = new Joe();
$joe->lastNom = "Smith";
echo $joe->lastNom , "\n";

?>
7
ответ дан 6 December 2019 в 15:36
поделиться

Из документов PHP о error_reporting:

// Reporting E_NOTICE can be good too (to report uninitialized
// variables or catch variable name misspellings ...)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
2
ответ дан 6 December 2019 в 15:36
поделиться

Вы могли попробовать:

error_reporting(E_ALL|E_STRICT);

Править: Хорошо, я теперь считал обновленный вопрос. Я думаю, что Вам не повезло. Это допустимо в PHP. Некоторые говорят, что это - функция. :)

2
ответ дан 6 December 2019 в 15:36
поделиться

Можно использовать это в коде:

error_reporting(E_ALL);

или это в php.ini

php_error_reporting=5

http://us2.php.net/error_reporting

1
ответ дан 6 December 2019 в 15:36
поделиться

Установка error_reporting для включения E_NOTICE может помочь несколько. Это имеет тенденцию отобразить уведомление/ошибку каждый раз, когда Вы используете неопределенную переменную (обратите внимание, что это не останавливает выполнение).

1
ответ дан 6 December 2019 в 15:36
поделиться

Для ловли необъявленного свойства, можно установить Ваш _ _Set () волшебный метод для ловли их

function __set($sKey, $sValue)
{
   // any setter data should be *returned* here

   // NOTE: this function will only get called if the property is not
   // publicly accessible.
   trigger_error("Non-existing property name ".$sKey, E_USER_WARNING);
}
0
ответ дан 6 December 2019 в 15:36
поделиться

Знайте, что это старый пост, но наткнулся на него в поисках решения.

Это мое окончательное решение:

У меня есть абстрактный класс, расширяемый моими классами, который вызывает ошибку для magic __get и __set.

Это мерзко, но работает!

Это похоже на предложения выше, но в объявление метода также добавлено «final», чтобы люди не перезаписывали его.

Мы также используем анализатор кода, чтобы отловить их, но я хотел, чтобы мои сообщения об ошибках «вживую», как я кодировал, вместо того, чтобы ждать отчета от анализатора. (Также люди могут игнорировать отчеты о сниффинге!)

Пример кода ниже

   <?php
/**
 * Abstract
 * Some default Abstract functions that everything should extend
 *
 * @package    example
 * @subpackage lib
 */

/**
 * Class mh_abstract
 * Some default MH Abstract functions that everything should extend
 *
 * @package    example
 * @subpackage lib
 */
abstract class lib_abstract
{
    /**
     * Throws an error if php magic set is called
     *
     * @param string        $key
     * @param string|object $value
     *
     * @throws Exception When trying to set a new class property
     */
    final public function __set($key, $value)
    {
        // get if the thing we are trying to set is a object
        if(is_object($value))
        {
            // if so let's just report it's name, not the full object
            $value = 'object:'.get_class($value);
        }

        // throw the error!
        throw new mh_lib_error_dev_unknownClassProperty('Tried to set new property '.$key.' with value '.$value);
    }

    /**
     * Throws an error if php magic get is called
     *
     * @param string $key
     *
     * @throws Exception When trying to set a new class property
     */
    final public function __get($key)
    {

        // throw the error!
        throw new mh_lib_error_dev_unknownClassProperty('Tried to get new property '.$key);
    }
}
1
ответ дан 6 December 2019 в 15:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: