検索
ホームページphp教程php手册Zend APIによって拡張されたPHPオブジェクトの自動ロードツール

spl の自動ロード機能と同様に、bloader は PHP オブジェクトの自動ロード ツールですが、よりシンプルで効率的であり、構成はより柔軟です。

bloader は、一般的に使用される自動ロード関数 ld と 2 つの補助機能を提供します。関数、ld_new(インスタンス化) および ld_unset (オブジェクトの破棄)。

#1 blloader は、現在のファイルまたは現在のディレクトリ内の .class.php ファイルとパスを自動的に検索します。
#2 ld('class name') を直接使用してオブジェクトを操作できます (例 1-1 を参照)。
#3 blloader は自動的に実行します。現在のスコープ内のクラス名を持つ変数を登録します。 変数 '$classname' (例 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 オブジェクト
(
[a1] => a1
[a2] => a2
[a3] => 配列
(
[0] => 1
[1] => 2
)
)
*/


コードをコピー コードは次のとおりです:

/**
例:
./class/c1.class.php:
*/
クラス c1
{
パブリック $a1=123;
パブリック $a3=100; )
{
$this ->a3=$ls;
}
パブリック関数 printt()
{
print_r(ld('c1')); グローバル属性を使用する*/
}
}
?>


例 1-2



コードをコピー

コードは次のとおりです: ...

ld('users')
//$users 変数は自動的に登録されます
$users->method();
....
?>


例 1-3



コピーcode

コードは次のとおりです。 ld('users') //Print オブジェクト

; ...
関数 printt()
{
var_dump(ld('users'))
}
?>


例 1-4


コードをコピー

コードは次のとおりです: $users_1=ld_new('users' );

$users_2=ld_new('users');

..
?>



コードをコピー

コードは次のとおりです:

ld('users'); unset_users(); .. function unset_users() {

ld_unset('users');

}
?>


入札用のメインコードを提供します




コードをコピー

コードは次のとおりです:


...
PHP_FUNCTION(ld)
{
char *obj_name;
int スレン;
zval **var,*para = NULL;
if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|z", &obj_name,&slen,¶) != SUCCESS)
{
zend_error(E_ERROR, "パラメータが失敗しました。");
}
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 スレン;
zval *para = NULL;
if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|z", &obj_name,&slen,¶) != SUCCESS)
{
zend_error(E_ERROR, "パラメータが失敗しました。");
}
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 スレン;
if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &obj_name,&slen) != SUCCESS)
{
zend_error(E_ERROR, "パラメータが失敗しました。");
}
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 *コンストラクター;
MAKE_STD_ZVAL(obj);
if(zend_lookup_class(obj_name, slen, &class_entry TSRMLS_CC)==SUCCESS)
{
object_init_ex(obj, *class_entry);
コンストラクター = Z_OBJ_HT_P(obj)->get_constructor(obj TSRMLS_CC);
if (コンストラクター != 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);
}
obj を返します。
}

static int ld_autoload_path(char *class_name TSRMLS_DC)
{
char *ext_name = ".class.php";
char *ファイルパス;
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) 成功を返します。
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);
}
}
失敗を返します。
}
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 ダミー = 1;
if (!file_handle.opened_pa​​th) file_handle.opened_pa​​th = estrndup(file_path, file_path_len);
if (zend_hash_add(&EG(include_files), file_handle.opened_pa​​th, strlen(file_handle.opened_pa​​th) 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(例外)) if (EG(return_value_ptr_ptr))
zval_ptr_dtor(EG(return_value_ptr_ptr));
}
成功を返します。
}
失敗を返します。
}
...

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。