Zend APIによって拡張されたPHPオブジェクトの自動ロードツール
spl の自動ロード機能と同様に、bloader は PHP オブジェクトの自動ロード ツールですが、よりシンプルで効率的であり、構成はより柔軟です。
bloader は、一般的に使用される自動ロード関数 ld と 2 つの補助機能を提供します。関数、ld_new(インスタンス化) および ld_unset (オブジェクトの破棄)。
#1 blloader は、現在のファイルまたは現在のディレクトリ内の
#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_path) file_handle.opened_path = estrndup(file_path, file_path_len);
if (zend_hash_add(&EG(include_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(例外)) if (EG(return_value_ptr_ptr))
zval_ptr_dtor(EG(return_value_ptr_ptr));
}
成功を返します。
}
失敗を返します。
}
...

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

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

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