php教程 php手册 zend api扩展的php对象的autoload工具

zend api扩展的php对象的autoload工具

Jun 13, 2016 pm 12:10 PM
api autoload php spl zend 기능 물체 도구 확장하다 ~의

类似spl的autoload功能,bloader为php对象的autoload工具,但相比较起来更简单高效,配置也更灵活.

bloader提供一个常用的autoload函数ld,以及两个辅助函数,ld_new(实例化)和ld_unset(销毁对象).

#1 bloader会自动搜索当前文件 或 当前目录下的.class.php文件,以及通过'_MODULES'常量定义的路径,实例化类返回对象.
#2 可直接使用ld('类名')操作对象(见实例 1-1)
#3 bloader会在当前作用域自动注册一个以类名为变量名的变量'$类名'(见实例 1-2)
#4 bloader中使用ld函数访问对象是全局范围有效 (见实例 1-3)
#5 使用ld_new实例化多个不同的对象,而不注册变量 (见实例 1-4)
#6 使用ld_unset注销已经实例化的对象 (见实例 1-5)

下载地址:http://code.google.com/p/bloader/downloads/detail?name=bloader.tar.gz

安装:
phpize
./configure --with-php-config=php-config --enable-bloader
make && make install

实例 1-1

复制代码 代码如下:


///define('_MODULES',dirname( __FILE__ ).'/class'); ///可选配置,在指定目录下查找类文件,以便于实例化
ld('c1',array('1','2'))->a1="a1"; ///参数2为构造函数的参数
ld('c1')->a2='a2';
ld('c1')->printt();

/**
show:
c1 Object
(
[a1] => a1
[a2] => a2
[a3] => Array
(
[0] => 1
[1] => 2
)
)
*/
?>


复制代码 代码如下:


/**
example:
./class/c1.class.php:
*/
class c1
{
public $a1=123;
public $a2='abc';
public $a3=100;
public function __construct($ls)
{
$this->a3=$ls;
}
public function printt()
{
print_r(ld('c1')); /**使用了全局特性*/
}
}
?>


实例 1-2

复制代码 代码如下:


...
ld('users');
//自动注册了$users变量
$users->method();
....
?>


实例 1-3

复制代码 代码如下:


ld('users');
printt(); //打印对象
...
function printt()
{
var_dump(ld('users'));
}
?>


实例 1-4

复制代码 代码如下:


$users_1=ld_new('users');
$users_2=ld_new('users');
...
?>


实例 1-5

复制代码 代码如下:


ld('users');
unset_users();
...
function unset_users()
{
ld_unset('users');
}
?>


奉上主要代码供拍砖

复制代码 代码如下:


...
PHP_FUNCTION(ld)
{
char *obj_name;
int slen;
zval **var,*para = NULL;
if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|z", &obj_name,&slen,¶) != SUCCESS)
{
zend_error(E_ERROR, "parameters failed.");
}
else
{
zval_dtor(return_value);
if(zend_hash_find(&EG(symbol_table),obj_name,slen+1,(void **) &var)!=SUCCESS)
{
ld_autoload_path(obj_name TSRMLS_DC);
*return_value = *ld_new_class(obj_name,slen,para,1);
}
else
{
*return_value = **var;
}
zval_copy_ctor(return_value);
}
}
PHP_FUNCTION(ld_new)
{
char *obj_name;
int slen;
zval *para = NULL;
if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|z", &obj_name,&slen,¶) != SUCCESS)
{
zend_error(E_ERROR, "parameters failed.");
}
else
{
zval_dtor(return_value);
ld_autoload_path(obj_name TSRMLS_DC);
*return_value = *ld_new_class(obj_name,slen,para,0);
zval_copy_ctor(return_value);
}
}
PHP_FUNCTION(ld_unset)
{
char *obj_name;
int slen;
if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &obj_name,&slen) != SUCCESS)
{
zend_error(E_ERROR, "parameters failed.");
}
else
{
zend_hash_del(&EG(symbol_table),obj_name,slen+1);
RETURN_TRUE;
}
}
/* }}} */

static zval *ld_new_class(char *obj_name,int slen,zval *para,int is_set)
{
zval *obj;
zend_class_entry **class_entry;
zend_function *constructor;
MAKE_STD_ZVAL(obj);
if(zend_lookup_class(obj_name, slen, &class_entry TSRMLS_CC)==SUCCESS)
{
object_init_ex(obj, *class_entry);
constructor = Z_OBJ_HT_P(obj)->get_constructor(obj TSRMLS_CC);
if (constructor != NULL)
{
int is_arg = (para == NULL) ? 0 : 1;
zend_call_method(&obj, *class_entry,&constructor, "__construct", 11, NULL, is_arg, para, NULL TSRMLS_CC);
}
if(is_set==1) ZEND_SET_SYMBOL(&EG(symbol_table),obj_name, obj);
}
else
{
ZVAL_FALSE(obj);
}
return obj;
}

static int ld_autoload_path(char *class_name TSRMLS_DC)
{
char *ext_name = ".class.php";
char *file_path;
zval const_root;
int path_len = spprintf(&file_path, 0, "%s%s",class_name,ext_name);
if(ld_autoload_file(file_path,path_len TSRMLS_DC)==SUCCESS) return SUCCESS;
if(zend_get_constant("_MODULES",8,&const_root TSRMLS_CC))
//if(zend_get_constant_ex("_MODULES",8,const_root,NULL, 0 TSRMLS_CC)) //ZEND_FETCH_CLASS_SILENT
{
if(Z_TYPE(const_root) == IS_STRING)
{
char *root_file_path;
int root_path_len = spprintf(&root_file_path, 0, "%s/%s", Z_STRVAL(const_root),file_path);
return ld_autoload_file(root_file_path,root_path_len TSRMLS_DC);
}
}
return FAILURE;
}
static int ld_autoload_file(char *file_path,int file_path_len TSRMLS_DC) /* {{{ */
{
zend_file_handle file_handle;
if (php_stream_open_for_zend_ex(file_path, &file_handle, ENFORCE_SAFE_MODE|USE_PATH|STREAM_OPEN_FOR_INCLUDE TSRMLS_CC) == SUCCESS)
{
zend_op_array *new_op_array;
unsigned int dummy = 1;
if (!file_handle.opened_path) file_handle.opened_path = estrndup(file_path, file_path_len);
if (zend_hash_add(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path)+1, (void *)&dummy, sizeof(int), NULL)==SUCCESS)
{
new_op_array = zend_compile_file(&file_handle, ZEND_REQUIRE TSRMLS_CC);
zend_destroy_file_handle(&file_handle TSRMLS_CC);
}
else
{
new_op_array = NULL;
zend_file_handle_dtor(&file_handle TSRMLS_CC);
}
if (new_op_array)
{
zval *result = NULL;
EG(return_value_ptr_ptr) = &result;
EG(active_op_array) = new_op_array;
if (!EG(active_symbol_table)) zend_rebuild_symbol_table(TSRMLS_C);
zend_execute(new_op_array TSRMLS_CC);
destroy_op_array(new_op_array TSRMLS_CC);
efree(new_op_array);
if (!EG(exception)) if (EG(return_value_ptr_ptr))
zval_ptr_dtor(EG(return_value_ptr_ptr));
}
return SUCCESS;
}
return FAILURE;
}
...

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

통화 서클 시장의 실시간 데이터에 대한 상위 10 개 무료 플랫폼 권장 사항이 출시됩니다. 통화 서클 시장의 실시간 데이터에 대한 상위 10 개 무료 플랫폼 권장 사항이 출시됩니다. Apr 22, 2025 am 08:12 AM

초보자에게 적합한 cryptocurrency 데이터 플랫폼에는 CoinmarketCap 및 비소 트럼펫이 포함됩니다. 1. CoinmarketCap은 초보자 및 기본 분석 요구에 대한 글로벌 실시간 가격, 시장 가치 및 거래량 순위를 제공합니다. 2. 비소 인용문은 중국 사용자가 저 위험 잠재적 프로젝트를 신속하게 선별하는 데 적합한 중국 친화적 인 인터페이스를 제공합니다.

초보자에게 적합한 디지털 통화 거래 앱은 무엇입니까? 한 기사에서 동전 원에 대해 알아보십시오 초보자에게 적합한 디지털 통화 거래 앱은 무엇입니까? 한 기사에서 동전 원에 대해 알아보십시오 Apr 22, 2025 am 08:45 AM

초보자에게 적합한 디지털 통화 거래 플랫폼을 선택할 때는 보안, 사용 편의성, 교육 자원 및 비용 투명성을 고려해야합니다. 1. 냉장 저장, 2 요인 검증 및 자산 보험을 제공하는 플랫폼에 우선 순위가 부여됩니다. 2. 간단한 인터페이스와 명확한 작동이있는 앱은 초보자에게 더 적합합니다. 3. 플랫폼은 튜토리얼 및 시장 분석과 같은 학습 도구를 제공해야합니다. 4. 거래 수수료 및 현금 인출 수수료와 같은 숨겨진 비용에주의하십시오.

신뢰할 수 있고 사용하기 쉬운 가상 환전 앱 권장 사항 통화 서클에서 상위 10 개 교환의 최신 순위 신뢰할 수 있고 사용하기 쉬운 가상 환전 앱 권장 사항 통화 서클에서 상위 10 개 교환의 최신 순위 Apr 22, 2025 pm 01:21 PM

신뢰할 수 있고 사용하기 쉬운 가상 환전 앱은 다음과 같습니다. 1. Binance, 2. OKX, 3. Gate.io, 4. Coinbase, 5. Kraken, 6. Huobi Global, 7. Bitfinex, 8. Kucoin, 9. Poloniex. 이 플랫폼은 거래량, 사용자 경험 및 보안에 가장 적합한 것으로 선정되었으며 모두 등록, 확인, 입금, 인출 및 거래 운영을 제공합니다.

무료 시장보기 소프트웨어 웹 사이트는 무엇입니까? 통화 서클에서 상위 10 개 무료 시장보기 소프트웨어 순위 무료 시장보기 소프트웨어 웹 사이트는 무엇입니까? 통화 서클에서 상위 10 개 무료 시장보기 소프트웨어 순위 Apr 22, 2025 am 10:57 AM

통화 서클의 상위 3 개 무료 시장보기 소프트웨어는 OKX, Binance 및 Gate.io입니다. 1. OKX는 다양한 차트 및 시장 분석을 지원하는 간단한 인터페이스 및 실시간 데이터를 제공합니다. 2. Binance는 강력한 기능, 정확한 데이터를 가지고 있으며 모든 종류의 거래자에게 적합합니다. 3. Gate.io는 안정성과 포괄적 성으로 유명하며 장기 및 단기 투자자에게 적합합니다.

2025 년의 디지털 통화 거래 플랫폼은 무엇입니까? 상위 10 개 디지털 통화 앱의 최신 순위 2025 년의 디지털 통화 거래 플랫폼은 무엇입니까? 상위 10 개 디지털 통화 앱의 최신 순위 Apr 22, 2025 pm 03:09 PM

상위 10 개 가상 통화 시청 플랫폼에 대한 권장 앱 : 1. OKX, 2. BINANCE, 3. GATE.IO, 4. HUOBI, 5. COINBASE, 6. KRAKE, 7. BITFINEX, 8. KUCOIN, 9. BITSTAMP, 실시간 시장 트렌드, 기술적 인 분석 및 사용자 제공 기준을 제공하는 데 도움이됩니다.

밈 동전 교환 순위 밈 동전 메인 교환 상위 10 개 지점 밈 동전 교환 순위 밈 동전 메인 교환 상위 10 개 지점 Apr 22, 2025 am 09:57 AM

밈 동전 거래에 가장 적합한 플랫폼은 다음과 같습니다. 1. 유동성이 높은 세계 최대의 Binance, 높은 유동성과 낮은 취급 수수료; 2. 다양한 밈 동전을 지원하는 효율적인 거래 엔진 인 OKX; 3. Xbit, 분산, 교차 체인 거래 지원; 4. 혈청 주문서와 결합 된 저렴한 비용, 저렴한 비용; 5. Pancakeswap (BSC DEX), 낮은 거래 수수료 및 빠른 속도; 6. Orca (Solana Dex), 사용자 경험 최적화; 7. 코인베이스, 높은 보안, 초보자에게 적합한; 8. 아시아에서 잘 알려진 Huobi, 풍부한 거래 쌍; 9. Dexrabbit, 지능

통화 서클 2025의 상위 10 개 시장 웹 사이트에 대한 팁 및 권장 사항 통화 서클 2025의 상위 10 개 시장 웹 사이트에 대한 팁 및 권장 사항 Apr 22, 2025 am 08:03 AM

국내 사용자 적응 솔루션에는 규정 준수 채널 및 현지화 도구가 포함됩니다. 1. 규정 준수 채널 : 국내에서 Circle Trade와 같은 OTC 플랫폼을 통한 프랜차이즈 환전. 홍콩 또는 해외 플랫폼을 통과해야합니다. 2. 현지화 도구 : 통화 서클 네트워크를 사용하여 중국 정보를 얻고 Huobi Global Station은 메타 우주 거래 터미널을 제공합니다.

상위 10 개 디지털 환전 앱 권장 사항, 통화 서클의 상위 10 개 가상 화폐 거래소 상위 10 개 디지털 환전 앱 권장 사항, 통화 서클의 상위 10 개 가상 화폐 거래소 Apr 22, 2025 pm 03:03 PM

상위 10 개 디지털 환전 교환에서 권장되는 앱 : 1. OKX, 2. BINANCE, 3. GATE.IO, 4. HUOBI, 5. COINBASE, 6. KUCOIN, 7. KRAKEN, 8. BITFINEX, 9. BITSTAMP, 이러한 앱은 실시간 시장 동향, 기술 분석 및 가격 리마 닉을 제공하는 데 도움이됩니다.

See all articles