PHP头条
热点:

【php手册】数据类型(array,object,callback/callable,error_reporting),


array对象

如果一个 object 类型转换为 array,则结果为一个数组,其单元为该对象的属性。键名将为成员变量名,不过有几点例外:整数属性不可访问;私有变量前会加上类名作前缀;保护变量前会加上一个 ‘*’ 做前缀。这些前缀的前后都各有一个 NULL 字符。这会导致一些不可预知的行为:

class A {
    private $A; // This will become '\0A\0A'
}

class B extends A {
    private $A; // This will become '\0B\0A'
    public $AA; // This will become 'AA'
}

var_dump((array) new B());

object对像

除对象外,其他任何类型的值转换为对象,将会创建一个stdClass内置类的实例。如果该值为null,则新的实例为空。
array转换为object将使键名成为属性名,并使其具有相对应的键值。除数字键外,不迭代就无法被访问。对于其他值的转换,会包含进成员变量scalar。

//create new empty object
$obj1 = new \stdClass; // Instantiate stdClass object
$obj2 = new class{}; // Instantiate anonymous class(php7)
$obj3 = (object)[]; // Cast empty array to object


Callback/Callable

PHP是将函数以string形式传递的。 可以使用任何内置或用户自定义函数,但除了语言结构例如:array(),echo,empty(),eval(),exit(),isset(),list(),print 或 unset()。

一个已实例化的 object 的方法被作为 array 传递,下标 0 包含该 object,下标 1 包含方法名。 在同一个类里可以访问 protected 和 private 方法。

静态类方法也可不经实例化该类的对象而传递,只要在下标 0 中包含类名而不是对象。自 PHP 5.2.3 起,也可以传递 ‘ClassName::methodName’。

除了普通的用户自定义函数外,也可传递 匿名函数 给回调参数。


//Example #1 回调函数示例

<?php 

// An example callback function
function my_callback_function() {
    echo 'hello world!';
}

// An example callback method
class MyClass {
    static function myCallbackMethod() {
        echo 'Hello World!';
    }
}

// Type 1: Simple callback
call_user_func('my_callback_function'); 

// Type 2: Static class method call
call_user_func(array('MyClass', 'myCallbackMethod')); 

// Type 3: Object method call
$obj = new MyClass();
call_user_func(array($obj, 'myCallbackMethod'));

// Type 4: Static class method call (As of PHP 5.2.3)
call_user_func('MyClass::myCallbackMethod');

// Type 5: Relative static class method call (As of PHP 5.3.0)
class A {
    public static function who() {
        echo "A\n";
    }
}

class B extends A {
    public static function who() {
        echo "B\n";
    }
}

call_user_func(array('B', 'parent::who')); // A

// Type 6: Objects implementing __invoke can be used as callables (since PHP 5.3)
class C {
    public function __invoke($name) {
        echo 'Hello ', $name, "\n";
    }
}

$c = new C();
call_user_func($c, 'PHP!');
?>




//Example #2 使用 Closure 的示例

<?php
// Our closure
$double = function($a) {
    return $a * 2;
};

// This is our range of numbers
$numbers = range(1, 5);

// Use the closure as a callback here to 
// double the size of each element in our 
// range
$new_numbers = array_map($double, $numbers);

print implode(' ', $new_numbers);
?>



//#example 3
<?php
class Foo {
    public static function doAwesomeThings() {
        FunctionCaller::callIt('Foo::someAwesomeMethod');
    }

    public static function someAwesomeMethod() {
        echo 'hello world';
    }
}

class FunctionCaller {
    public static function callIt(callable $func) {
        call_user_func($func);
    }
}

Foo::doAwesomeThings();
?>


//#example 4
<?php 
class MyClass { 

    public $property = 'Hello World!'; 

    public function MyMethod() 
    { 
        call_user_func(array($this, 'myCallbackMethod')); 
    } 

    public function MyCallbackMethod() 
    { 
        echo $this->property; 
    } 

} 

$obj = new MyClass();
echo $obj->MyMethod();
?>

error_reporting

error_reporting — 设置应该报何种错误。


predefined constants

predefined constants(bitmask)description

E_ERROR ( 1 )
致命的运行时错误。一般是不可恢复的情况,例如内存分配导致的问题。

E_WARNING ( 2 )
运行时警告(非致命错误)。仅给提示。

E_PARSE ( 4 ) 编译时语法解析错误。分析器产生。

E_NOTICE ( 8 )
运行时通知。脚本可能表现为错误。

E_CORE_ERROR ( 16 )
php初始化启动过程中发生的致命错误。类似 E_ERROR,但是由php引擎核心产生。(since PHP 4)

E_CORE_WARNING ( 32 )
php初始化启动过程中发生的警告(非致命错误)。类似 E_WARNING,但是由php引擎核心产生。(since PHP 4)

E_COMPILE_WARNING ( 64 )
编译时警告(非致命错误)。类似E_WARNING,但是由Zend脚本引擎产生。(since PHP 4)

E_USER_ERROR ( 256 )
用户产生的错误信息。类似E_ERROR,但是由用户自己在代码中使用 trigger_error() 函数产生。(since PHP 4)

E_USER_WARNING ( 512 )
用户产生的警告信息。(since PHP 4)

E_USER_NOTICE ( 1024 )
用户产生的通知信息。(since PHP 4)

E_STRICT ( 2048 )
启用php对代码的修改建议,以确保代码具有最佳的互操作性和向前兼容性。(since PHP 5,included in E_ALL until PHP 5.4.0)

E_RECOVERABLE_ERROR ( 4096 )
可被捕捉的致命错误。可能发生了非常危险的错误,可能成为E_ERROR导致脚本终止。(since PHP 5.2.0)

E_DEPRECATED ( 8192 )
运行时警告。启用后将会对在未来版本中可能无法正常工作的代码给出警告。(since PHP 5.3.0)

E_USER_DEPRECATED ( 16384 )
用户产生的警告信息。类似E_DEPRECATED,由用户使用trigger_error()产生。(since PHP 5.3.0)

E_ALL (32767 in PHP 5.4.x, 30719 in PHP 5.3.x, 6143 in PHP 5.2.x, 2047 previously)支持所有的错误和警告(except of E_STRICT prior to PHP 5.4.0)

上述值(数字或符号)用于构建一个指定要报告哪些错误的位掩码。您可以使用按位运算符来组合这些值或掩盖某些类型的错误。 请注意,只有’|’,’〜’,’!’,’^’和’&’可以在php.ini中理解。

The above values (either numerical or symbolic) are used to build up a bitmask that specifies which errors to report. You can use the bitwise operators to combine these values or mask out certain types of errors. Note that only ‘|’, ‘~’, ‘!’, ‘^’ and ‘&’ will be understood within php.ini.(感觉没翻译好,暂且留下英文)


//获取错误报告常量值(常量名和数值)
<?php 
$errLvl = error_reporting(); 
for ($i = 0; $i < 15;  $i++ ) { 
    print FriendlyErrorType($errLvl & pow(2, $i)) . "<br>\\n"; 
} 

function FriendlyErrorType($type) 
{ 
    switch($type) 
    { 
        case E_ERROR: // 1 // 
            return 'E_ERROR'; 
        case E_WARNING: // 2 // 
            return 'E_WARNING'; 
        case E_PARSE: // 4 // 
            return 'E_PARSE'; 
        case E_NOTICE: // 8 // 
            return 'E_NOTICE'; 
        case E_CORE_ERROR: // 16 // 
            return 'E_CORE_ERROR'; 
        case E_CORE_WARNING: // 32 // 
            return 'E_CORE_WARNING'; 
        case E_COMPILE_ERROR: // 64 // 
            return 'E_COMPILE_ERROR'; 
        case E_COMPILE_WARNING: // 128 // 
            return 'E_COMPILE_WARNING'; 
        case E_USER_ERROR: // 256 // 
            return 'E_USER_ERROR'; 
        case E_USER_WARNING: // 512 // 
            return 'E_USER_WARNING'; 
        case E_USER_NOTICE: // 1024 // 
            return 'E_USER_NOTICE'; 
        case E_STRICT: // 2048 // 
            return 'E_STRICT'; 
        case E_RECOVERABLE_ERROR: // 4096 // 
            return 'E_RECOVERABLE_ERROR'; 
        case E_DEPRECATED: // 8192 // 
            return 'E_DEPRECATED'; 
        case E_USER_DEPRECATED: // 16384 // 
            return 'E_USER_DEPRECATED'; 
    } 
    return ""; 
} 
?>

//获取错误报告常量(常量名和数值)


//获取错误报告常量名
<?php
$pot = 0;
foreach (array_reverse(str_split(decbin(error_reporting()))) as $bit) {
    if ($bit == 1) {
        echo array_search(pow(2, $pot), get_defined_constants(true)['Core']). "<br>\n";
    }
    $pot++;
}
?>

//输入常量数值,获取常量名
<?php
    function readable_error_type($error_code)
    {
        $constants = array();
        foreach(get_defined_constants() as $key => $value)
        {
            if(strpos($key, 'E_') === 0 && ($value <= $error_code) && ($value & $error_code))
            {
                $constants[] = $key;
            }
        }


        return implode(' | ', $constants);
    }
?>

www.phpzy.comtrue/php/5094.htmlTechArticle【php手册】数据类型(array,object,callback/callable,error_reporting), array对象 如果一个 object 类型转换为 array,则结果为一个数组,其单元为该对象的属性。键名将为成员变量名,不过有...

相关文章

    暂无相关文章
相关频道:

PHP之友评论

今天推荐