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

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

Jun 13, 2016 pm 12:10 PM
api autoload php spl zend 関数 物体 道具 拡大する

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

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

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

PHPとPython:2つの一般的なプログラミング言語を比較します PHPとPython:2つの一般的なプログラミング言語を比較します Apr 14, 2025 am 12:13 AM

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHPの永続的な関連性:それはまだ生きていますか? PHPの永続的な関連性:それはまだ生きていますか? Apr 14, 2025 am 12:12 AM

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。

Debian Readdirが他のツールと統合する方法 Debian Readdirが他のツールと統合する方法 Apr 13, 2025 am 09:42 AM

DebianシステムのReadDir関数は、ディレクトリコンテンツの読み取りに使用されるシステムコールであり、Cプログラミングでよく使用されます。この記事では、ReadDirを他のツールと統合して機能を強化する方法について説明します。方法1:C言語プログラムを最初にパイプラインと組み合わせて、cプログラムを作成してreaddir関数を呼び出して結果をinclude#include#include inctargc、char*argv []){dir*dir; structdireant*entry; if(argc!= 2){(argc!= 2){

DebianがHadoopデータ処理速度を改善する方法 DebianがHadoopデータ処理速度を改善する方法 Apr 13, 2025 am 11:54 AM

この記事では、DebianシステムのHadoopデータ処理効率を改善する方法について説明します。最適化戦略では、ハードウェアのアップグレード、オペレーティングシステムパラメーターの調整、Hadoop構成の変更、および効率的なアルゴリズムとツールの使用をカバーしています。 1.ハードウェアリソースの強化により、すべてのノードが一貫したハードウェア構成、特にCPU、メモリ、ネットワーク機器のパフォーマンスに注意を払うことが保証されます。高性能ハードウェアコンポーネントを選択することは、全体的な処理速度を改善するために不可欠です。 2。オペレーティングシステムチューニングファイル記述子とネットワーク接続:/etc/security/limits.confファイルを変更して、システムによって同時に開くことができるファイル記述子とネットワーク接続の上限を増やします。 JVMパラメーター調整:Hadoop-env.shファイルで調整します

Debian Mail Server SSL証明書のインストール方法 Debian Mail Server SSL証明書のインストール方法 Apr 13, 2025 am 11:39 AM

Debian Mail ServerにSSL証明書をインストールする手順は次のとおりです。1。最初にOpenSSL Toolkitをインストールすると、OpenSSLツールキットがシステムに既にインストールされていることを確認してください。インストールされていない場合は、次のコマンドを使用してインストールできます。sudoapt-getUpdatesudoapt-getInstalopenssl2。秘密キーと証明書のリクエストを生成次に、OpenSSLを使用して2048ビットRSA秘密キーと証明書リクエスト(CSR)を生成します:Openss

Nginxログを使用してWebサイトの速度を向上させる方法 Nginxログを使用してWebサイトの速度を向上させる方法 Apr 13, 2025 am 09:09 AM

Webサイトのパフォーマンスの最適化は、アクセスログの詳細な分析と切り離せません。 Nginx Logは、Webサイトにアクセスしているユーザーの詳細情報を記録します。このデータを巧みに使用すると、Webサイトの速度を効果的に向上させることができます。この記事では、Nginxログに基づいたいくつかのWebサイトのパフォーマンス最適化方法を紹介します。 1。ユーザーの動作分析と最適化。 NGINXログを分析することにより、ユーザーの動作を深く理解し、これに基づいてターゲットを絞った最適化を行うことができます。高周波アクセスIP識別:アクセス周波数の高いIPアドレスを見つけ、特定のコンテンツの帯域幅の増加や応答速度の改善など、これらのIPアドレスのサーバーリソース構成を最適化できます。ステータスコード分析:異なるHTTPステータスコード(404エラーなど)の頻度を分析し、ウェブサイトのナビゲーションやコンテンツ管理の問題を見つけて続行します

アクション中のPHP:実際の例とアプリケーション アクション中のPHP:実際の例とアプリケーション Apr 14, 2025 am 12:19 AM

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

DebianのZookeeperバージョンをアップグレードする方法 DebianのZookeeperバージョンをアップグレードする方法 Apr 13, 2025 am 10:42 AM

DebianシステムのZookeeperバージョンのアップグレードは、以下の手順に従うことができます。1。アップグレード前に既存の構成とデータをバックアップすると、既存のZookeeper構成ファイルとデータディレクトリをバックアップすることを強くお勧めします。 sudocp-r/var/lib/zookeeper/var/lib/zookeeper_backupsudocp/etc/zookeeper/conf/zoo.cfg/etc/zookeeper/conf/zookeeper/z

See all articles