国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ php教程 php手冊(cè) Zend APIによって拡張されたPHPオブジェクトの自動(dòng)ロードツール

Zend APIによって拡張されたPHPオブジェクトの自動(dòng)ロードツール

Jun 13, 2016 pm 12:10 PM
api autoload php spl zend 関數(shù) 物體 道具 拡大する

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

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

#1 blloader は、現(xiàn)在のファイルまたは現(xiàn)在のディレクトリ內(nèi)の .class.php ファイルとパスを自動(dòng)的に検索します。
#2 ld('class name') を直接使用してオブジェクトを操作できます (例 1-1 を參照)。
#3 blloader は自動(dòng)的に実行します?,F(xiàn)在のスコープ內(nèi)のクラス名を持つ変數(shù)を登録します。 変數(shù) '$classname' (例 1-2 を參照)
#4 bloader で ld 関數(shù)を使用してオブジェクトにアクセスすることはグローバルに有効です (例 1-3 を參照)
#5 ld_new を使用して、変數(shù)を登録せずに複數(shù)の異なるオブジェクトをインスタンス化します (例 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'); ///オプションの設(shè)定。指定されたディレクトリでクラス ファイルを検索します。インスタンス化を容易にするため
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;
}
パブリック関數(shù) printt()
{
print_r(ld('c1')); グローバル屬性を使用する*/
}
}
?>


例 1-2



コードをコピー

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

ld('users')
//$users 変數(shù)は自動(dòng)的に登録されます
$users->method();
....
?>


例 1-3



コピーcode

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

; ...
関數(shù) 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));
}
成功を返します。
}
失敗を返します。
}
...

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見つけた場(chǎng)合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無(wú)料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無(wú)料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡(jiǎn)単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無(wú)料のコードエディター

SublimeText3 中國(guó)語(yǔ)版

SublimeText3 中國(guó)語(yǔ)版

中國(guó)語(yǔ)版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Binance公式アプリBinance Exchangeアプリダウンロードリンクをダウンロードする方法 Binance公式アプリBinance Exchangeアプリダウンロードリンクをダウンロードする方法 Aug 04, 2025 pm 11:21 PM

國(guó)際的にはブロックチェーンデジタルアセット取引プラットフォームとして、Binanceはユーザーに安全で便利な取引體験を提供します。その公式アプリは、市場(chǎng)視聴、資産管理、通貨取引、FIAT通貨取引など、複數(shù)のコア機(jī)能を統(tǒng)合しています。

Composer dump -autoload -oをいつ実行する必要がありますか? Composer dump -autoload -oをいつ実行する必要がありますか? Aug 03, 2025 pm 04:54 PM

runcomposeRdump-autoload-owhendeployingtoproductiontoptoptoptoloading by generatingaclassmapandavodavodavodavodavodavodavodavodavodavodavodavodavodavodavodavodavodavodavodavodavoingiding lookups.2

ユーザーデータにHTML「入力」タイプを使用します ユーザーデータにHTML「入力」タイプを使用します Aug 03, 2025 am 11:07 AM

適切なHTMLinputタイプを選択すると、データの精度を向上させ、ユーザーエクスペリエンスを向上させ、使いやすさを向上させることができます。 1.テキスト、電子メール、電話、番號(hào)、日付など、データ型に従って対応する入力タイプを選択します。 2。HTML5を使用して、より直感的な相互作用方法を提供できるU(xiǎn)RL、色、範(fàn)囲、検索などの新しいタイプを追加します。 3.プレースホルダーと必要な屬性を使用して、フォームフィリングの効率と精度を改善しますが、プレースホルダーがラベルを置き換えることはできないことに注意してください。

HTTPミドルウェアロギングの例を例に進(jìn)めます HTTPミドルウェアロギングの例を例に進(jìn)めます Aug 03, 2025 am 11:35 AM

GOのHTTPログミドルウェアは、リクエストメソッド、パス、クライアントIP、および時(shí)間がかかることを記録できます。 1. http.handlerfuncを使用してプロセッサをラップします。2。next.servehttpを呼び出す前後の開始時(shí)間と終了時(shí)間を記録します。完全なサンプルコードの実行が検証されており、中小のプロジェクトの開始に適しています。拡張機(jī)能の提案には、ステータスコードのキャプチャ、JSONログのサポート、リクエストIDトラッキングが含まれます。

Binance公式アプリダウンロード最新のリンクBinance Exchangeアプリインストールポータル Binance公式アプリダウンロード最新のリンクBinance Exchangeアプリインストールポータル Aug 04, 2025 pm 11:24 PM

Binanceは世界的に有名なデジタル資産取引プラットフォームであり、ユーザーに安全で安定した豊富な暗號(hào)通貨取引サービスを提供します。そのアプリは設(shè)計(jì)が簡(jiǎn)単で強(qiáng)力で、さまざまなトランザクションタイプと資産管理ツールをサポートしています。

YII開発者:重要な技術(shù)的スキルの習(xí)得 YII開発者:重要な技術(shù)的スキルの習(xí)得 Aug 04, 2025 pm 04:54 PM

YIIのマスターになるには、次のスキルを習(xí)得する必要があります。1)YIIのMVCアーキテクチャを理解する、2)ActivereCordormの使用に習(xí)熟している、3)GIIコード生成ツールを効果的に利用する、4)マスターYIIの検証ルール、5)データベースクエリパフォーマンスを最適化する、6)これらのスキルの學(xué)習(xí)と実踐を通じて、YIIフレームワークの下での開発能力を包括的に改善することができます。

OUYI ExchangeアプリAndroidバージョンv6.132.0 OUYIアプリ公式Webサイトダウンロードおよびインストールガイド2025 OUYI ExchangeアプリAndroidバージョンv6.132.0 OUYIアプリ公式Webサイトダウンロードおよびインストールガイド2025 Aug 04, 2025 pm 11:18 PM

OKXは、世界的に有名な包括的なデジタル資産サービスプラットフォームであり、スムーズな運(yùn)用エクスペリエンスと強(qiáng)力な機(jī)能統(tǒng)合により、スポット、契約、オプションなどを含む多様な製品やサービスをユーザーに提供しています。

Binance公式アプリ最新の公式ウェブサイト入學(xué)バイナンス交換アプリのダウンロードアドレス Binance公式アプリ最新の公式ウェブサイト入學(xué)バイナンス交換アプリのダウンロードアドレス Aug 04, 2025 pm 11:27 PM

Binanceは、世界的に有名なデジタル資産取引プラットフォームの1つであり、ユーザーに安全で安定した便利な暗號(hào)通貨取引サービスを提供します。 Binanceアプリを使用して、いつでも市場(chǎng)の狀況を表示したり、購(gòu)入、販売、資産管理を行うことができます。

See all articles