欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

PHP如何实现定义对象类型的常量

程序员文章站 2022-05-12 08:51:11
...

正常的直接define()一个对象,是回报错的,但我们查看PHP源码,可以发现除了数组不允许外,其他类型都可以用来定义常量,只不过对象的话要转化。 我们只需使用tostring方法即可。 无 repeat:switch (Z_TYPE_P(val)) {case IS_LONG:case IS_DOUBLE:case IS_STR

正常的直接define()一个对象,是回报错的,但我们查看PHP源码,可以发现除了数组不允许外,其他类型都可以用来定义常量,只不过对象的话要转化。
我们只需使用tostring方法即可。
repeat:
	switch (Z_TYPE_P(val)) {
		case IS_LONG:
		case IS_DOUBLE:
		case IS_STRING:
		case IS_BOOL:
		case IS_RESOURCE:
		case IS_NULL:
			break;
		case IS_OBJECT:
			if (!val_free) {
				if (Z_OBJ_HT_P(val)->get) {
					val_free = val = Z_OBJ_HT_P(val)->get(val TSRMLS_CC);
					goto repeat;
				} else if (Z_OBJ_HT_P(val)->cast_object) {
					ALLOC_INIT_ZVAL(val_free);
					if (Z_OBJ_HT_P(val)->cast_object(val, val_free, IS_STRING TSRMLS_CC) == SUCCESS) {
						val = val_free;
						break;
					}
				}
			}
			/* no break */
		default:
			zend_error(E_WARNING,"Constants may only evaluate to scalar values");
			if (val_free) {
				zval_ptr_dtor(&val_free);
			}
			RETURN_FALSE;
	}
Class Test{
   public $name='呵呵';
   public function __toString(){
     return $this->name;
   }
}

$t=new Test();
define('TT',$t);
echo TT;