PHP 警告、通知和错误


PHP Warnings, Notices and Errors

嘿伙计们,我现在有三件事要处理,希望你能帮忙。我的代码中有错误、警告和通知,我想修补,希望你能帮助我,错误如下。

有奇妙的错误

PHP Warning:  Invalid argument supplied for foreach() in php/libraries/RotateLatestAssets.class.php on line 35
PHP Notice:   Undefined variable: config in php/libraries/RotateLatestAssets.class.php on line 18
PHP Notice:   Undefined variable: json in php/libraries/RotateLatestAssets.class.php on line 31
PHP Notice:   Undefined variable: json in php/libraries/RotateLatestAssets.class.php on line 32

然后有一个非常非常奇怪的,我在我的代码中注释掉了......我在想侏儒,但谁知道呢....

这是类

<?php
class RotateLatestAssets
{
    protected   $config;
    public function __construct()
    {
        $this->config = $config;
    }
    //********************************************************************************
    //* Public Methods
    //********************************************************************************
    public function getAssets()
    {
        $this->json = self::jsonDecode($this->config, true);

        define('latest',    __DIR__ . $json['paths']['latest']);
        define('dist',      __DIR__ . $json['paths']['dist']);

        foreach($this->json['files'] as $fileName => $fileVersion)
        {
            $cacheName = implode("-$fileVersion.", explode('.',$fileName) );
            if(!file_exists(dist . $cacheName))
            {
                try {
                    copy(latest . $cacheName, dist . $fileName);
                } catch(Exception $e) {
                    echo 'Copy Exception: ',  $e->getMessage(), "'n";
                }
            }
        }
    }
    //********************************************************************************
    //* Static Methods
    //********************************************************************************
    /**
    * Returns a json decoded object or array
    *
    * @param    string  $json
    * @param    bool    $toAssoc
    * @return   object|array Depending on the parameter supplied
    */
    private static function jsonDecode($json, $toAssoc = true)
    {
        /** 
         * Based on known JSON_DECODE() errors
         * 0 = JSON_ERROR_NONE
         * 1 = JSON_ERROR_DEPTH
         * 2 = JSON_ERROR_STATE_MISMATCH
         * 3 = JSON_ERROR_CTRL_CHAR
         * 4 = JSON_ERROR_SYNTAX
         * 5 = JSON_ERROR_UTF8
         */
        $result = json_decode($json, $toAssoc);
        /*  Will produce this sometimes out of the blue after a few refreshes?
            PHP Fatal error:  Uncaught exception 'Exception' with message 
            'JSON Error:  - Syntax error, malformed JSON' in php/libraries/RotateLatestAssets.class.php:99
            Stack trace:
            #0 php/libraries/RotateLatestAssets.class.php(28): RotateLatestAssets::jsonDecode(NULL, true)
            #1 php/libraries/RotateLatestAssets.class.php(119): RotateLatestAssets->getAssets()
            #2 {main}
              thrown in php/libraries/RotateLatestAssets.class.php on line 99
        */
        switch(json_last_error())
        {
            case JSON_ERROR_DEPTH:
                $error =  ' - Maximum stack depth exceeded';
                break;
            case JSON_ERROR_STATE_MISMATCH:
                $error = ' - Invalid or malformed JSON encoding';
                break;
            case JSON_ERROR_CTRL_CHAR:
                $error = ' - Unexpected control character found';
                break;
            case JSON_ERROR_SYNTAX:
                $error = ' - Syntax error, malformed JSON';
                break;
            case JSON_ERROR_UTF8:
                $error = ' - Syntax error, malformed UTF-8 characters';
                break;
            case JSON_ERROR_NONE:
            default:
                $error = ''; 
        }
        if (!empty($error)) throw new Exception('JSON Error: '.$error);
        return $result; 
    }
    /**
    * Returns bool value for state of array recieved dev:(true) live:(false)
    *
    * @param    array   $array
    * @return   bool
    */
    private static function checkMode($array)
    {
        if(!is_array($array)) throw new Exception("Wrong Type Passed. Expecting (array), received (".gettype($array).")");
        return ($array['dev'] == 'true') ? true : false;
    }
}

$instance = new RotateLatestAssets($_SERVER['DOCUMENT_ROOT'].'build/config.json');
$instance->getAssets();
?>

在构造函数中,您有:

$this->config = $config;

然而,$config变量永远不会被创建,所以它没有价值。

你在getAssets()做同样的事情.您使用$json,但从未定义过。

无效参数错误是因为您本质上在做foreach(null这是错误的,您只能迭代一个数组。