Heim > php教程 > php手册 > PHP如何实现定义对象类型的常量

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

WBOY
Freigeben: 2016-06-06 19:35:25
Original
991 Leute haben es durchsucht

正常的直接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;
	}
Nach dem Login kopieren
Class Test{
   public $name='呵呵';
   public function __toString(){
     return $this->name;
   }
}

$t=new Test();
define('TT',$t);
echo TT;
Nach dem Login kopieren
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage