PHPイベントメカニズム(2)
コードをコピー コードは次のとおりです:
class Event extends stdClass{
public $target=null;
パブリック $type=null;
/**
* イベントの作成
* @param string $type
*/
パブリック関数 __construct($type){
$this->type=trim($type);
}
/**
* イベント文字列を取得
*/
public function __toString(){
return $this->type;
}
}
抽象クラス EventDispatcher{
private $_callback_method;
/**
* 追加イベント
* @param Event $event
* @param string $method
* @param stringobject $class
* @return boolean true
*/
public functionattach($event,$method,$class=null){
$eventsstr=(string)$event;
if($this->has($event,$method,$class))
return true;
if($class!=null){
$this->_check_method($class,$method);
$this->_callback_method[$eventsstr][]=$this->_create_listener_method($eventsstr,$class,$method);
}else{
$this->_check_function($method);
$this->_callback_method[$eventsstr][]=$this->_create_listener_fn($eventsstr,$method);
}
true を返します。
}
/**
* ディスパッチイベント
* @param Event $event
* @param string $method
* @param stringobject $class
* @return void
*/
public functiondispatch(Event $event){
$event->target=$this;
$eventstr=(string)$event;
if($this->_check_callback($eventsstr)){
foreach ($this->_callback_method[$eventsstr] as $v){
if($v['object']) {
if(is_object($v['class'])){
$v['class']->$v['method']($event);
}else{
call_user_func(array($v['class'], $v['method']),$event);
}
}else{
$v['function']($event);
}
}
}
}
/**
* イベントの削除
* @param Event $event
* @param string $method
* @param string $class
* @return boolean true
*/
public function detact($event,$method,$class=null){
$イベント文字列=(文字列)$イベント;
if(!$this->_check_callback($eventsstr))
return true;
if(!$this->has($event,$method,$class))
return true;
if($class!=null){
$this->_check_method($class,$method);
foreach ($this->callback_method[$eventsstr] as $k=>$v) {
if(($v==$this->create_listener_method($eventsstr,$class,$method) ))){
unset($this->_callback_method[$eventsstr][$k]);
true を返します。
}
}
true を返します。
}else{
$this->_check_function($method);
foreach ($this->callback_method[$eventstr] as $k=>$v) {
if(($v==$this->create_listener_fn($eventstr,$method))) {
unset($this->_callback_method[$eventsstr][$k]);
true を返します。
}
}
true を返します。
}
}
/**
* イベントが監視されているかどうかを確認します
* @param Event $event
* @param string $method
* @param string $class
* @return boolean
*/
public function has($event,$method,$class=null){
$eventsstr=(string)$event;
if(($class!=null)){
$this->_check_method($class,$method);
if($this->_check_callback($eventsstr)){
foreach($this->_callback_method[$eventsstr] as $v){
if(is_object($v['class' ])){
$v_class=get_class($v['class']);
}else{
$v_class=$v['class'];
}
if(is_object($class)){
$s_class=get_class($class);
}else{
$s_class=$class;
}
$temp_v=array(
"クラス"=>$v_class,
"メソッド"=>$method,
);
$temp_s=array(
"クラス"=>$s_class,
"メソッド"=>$method,
);
if($temp_v==$temp_s){
true を返します。
}
}
}
}else{
$this->_check_function($method);
if($this->_check_callback($eventsstr)){
foreach($this->_callback_method[$eventsstr] as $v){
if($method==$v[' function']){
true を返します。
}
}
}
}
false を返します。
}
/**
* 指定されたメソッドが指定されたクラスに存在するかどうかを確認します
* @param string $class
* @param string $method
* @Exception Exception_Event
* @return void
*/
プライベート関数 _check_method($class,$method){
if(!method_exists($class,$method)){
throw new Exception(get_class($class)." 存在しない ".$method." メソッド",1);
}
}
/**
* 指定された関数が存在するか確認します
* @param string $function
* @return void
*/
プライベート関数 _check_function($function){
if(!function_exists($function)){
throw new Exception( $function.「関数が存在しません」、2);
}
}
/**
* 指定されたイベントのリッスン関数があるかどうかを検出します
* @param string $eventsstr
* @return boolean
*/
プライベート関数 _check_callback($eventsstr){
if(isset($this->_callback_method[$eventsstr])
&&is_array($this->_callback_method[$eventstr])
){
return true;
}
false を返します。
}
/**
* リスニング関数の配列を作成します
* @param string $eventsstr
* @param string $function
* @return array
*/
プライベート関数 _create_listener_fn($eventsstr,$function){
return array(
"object"=>false,
"function"=>$function 、
);
}
/**
* リスニングクラス配列を作成します
* @param string $eventsstr
* @param string $class
* @param string $method
* @return array
*/
private function _create_listener_method($eventsstr,$class,$method){
return array(
"object"=>true,
"クラス"=>$class,
"メソッド"=>$method,
);
}
}
class myevent extends Event{
const aa='aaa';
}
class ball extends EventDispatcher{
public function aa(){
$event=new myevent(myevent::aa);
$this->dispatch($event);
}
}
class mytest {
public function test(){
$ball=new ball();
$ball->attach(myevent::aa,'kk');
$ball->aa();
}
パブリック関数 kk($e){
print_r($e);
}
}
try{
$t=new mytest();
$t->test();
}catch (Exception $e){
echo $e->getmessage();
}

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

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

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

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

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

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

ホットトピック











クラスとメソッドの概念とインスタンス クラス (Class): 同じプロパティとメソッドを持つオブジェクトのコレクションを記述するために使用されます。コレクション内のすべてのオブジェクトに共通のプロパティとメソッドを定義します。オブジェクトはクラスのインスタンスです。メソッド: クラスで定義された関数。クラス構築メソッド __init__(): クラスには init() という名前の特別なメソッド (構築メソッド) があり、クラスがインスタンス化されるときに自動的に呼び出されます。インスタンス変数: クラスの宣言において、属性を変数で表現したものをインスタンス変数と呼びます。インスタンス変数とは、self で修飾された変数です。インスタンス化: クラスのインスタンス、クラスの特定のオブジェクトを作成します。継承: つまり、派生クラス (派生クラス) は基本クラス (ベースクラス) を継承します。

ファンクションとは、関数を意味します。これは、特定の関数を備えた再利用可能なコード ブロックです。プログラムの基本コンポーネントの 1 つです。入力パラメータを受け取り、特定の操作を実行し、結果を返すことができます。その目的は、再利用可能なコード ブロックをカプセル化することです。コードの再利用性と保守性を向上させるコード。

Web アプリケーション開発に PHP を使用する場合、多くの場合データベースを使用する必要があります。データベースを使用すると、エラー メッセージがよく発生します。その中でも、PHPFatalerror: Calltoamemberfunctionfetch() は、PDO を使用してデータベースをクエリするときに発生する比較的一般的なエラーです。では、このエラーの原因と解決方法は何でしょうか?この記事ではそれについて詳しく説明します。 1. エラーの原因

クラスとはPythonでクラスを定義するためのキーワードです クラスの定義方法:classの後ろにスペースを入れてからクラス名を追加します; クラス名のルール:最初の文字を大文字にします 複数の単語がある場合はキャメルケースを使用してください[class Dog()] などの名前付け。

jQuery は、Web 開発で広く使用されている古典的な JavaScript ライブラリで、イベントの処理、DOM 要素の操作、Web ページ上でのアニメーションの実行などの操作を簡素化します。 jQueryを使っていると要素のクラス名を置き換える場面がよくありますが、この記事ではその実践的な方法と具体的なコード例を紹介します。 1.removeClass() メソッドと addClass() メソッドを使用する jQuery には、削除用の RemoveClass() メソッドが用意されています。

PHP コードを記述するとき、クラスを使用するのは非常に一般的な方法です。クラスを使用すると、関連する関数とデータを 1 つのユニットにカプセル化できるため、コードがより明確になり、読みやすく、保守しやすくなります。この記事では、PHPClass の使用法を詳しく紹介し、クラスを適用して実際のプロジェクトでコードを最適化する方法を読者がよりよく理解できるように、具体的なコード例を示します。 1. クラスの作成と使用 PHP では、キーワード class を使用してクラスを定義し、クラス内のプロパティとメソッドを定義できます。

PHP8.0 のイベント処理ライブラリ: Event インターネットの継続的な発展に伴い、PHP は人気のバックエンド プログラミング言語として、さまざまな Web アプリケーションの開発に広く使用されています。このプロセスでは、イベント駆動のメカニズムが非常に重要な部分になっています。 PHP8.0 のイベント処理ライブラリ Event は、より効率的で柔軟なイベント処理メソッドを提供します。イベント処理とは何ですか? イベント処理は、Web アプリケーションの開発において非常に重要な概念です。イベントは任意の種類のユーザー行にすることができます

Vue エラー: v-bind を使用してクラスとスタイルを正しくバインドできません。解決方法は? Vue 開発では、v-bind 命令を使用してクラスとスタイルを動的にバインドすることがよくありますが、v-bind を正しく使用してクラスとスタイルをバインドできないなどの問題が発生することがあります。この記事では、この問題の原因と解決策を説明します。まず、v-bind ディレクティブを理解しましょう。 v-bind は V をバインドするために使用されます
