ホームページ php教程 php手册 PHPイベントメカニズム(2)

PHPイベントメカニズム(2)

Jun 21, 2016 am 08:55 AM
class event function method

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


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();
}



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

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Python でクラスとメソッドを使用する方法 Python でクラスとメソッドを使用する方法 Apr 21, 2023 pm 02:28 PM

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

機能とはどういう意味ですか? 機能とはどういう意味ですか? Aug 04, 2023 am 10:33 AM

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

PHP 致命的エラーの解決策: メンバー関数 fetch() の呼び出し PHP 致命的エラーの解決策: メンバー関数 fetch() の呼び出し Jun 23, 2023 am 09:36 AM

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

Pythonにおけるクラスとは何を意味するのでしょうか? Pythonにおけるクラスとは何を意味するのでしょうか? May 21, 2019 pm 05:10 PM

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

jQueryを使用して要素のクラス名を置換する jQueryを使用して要素のクラス名を置換する Feb 24, 2024 pm 11:03 PM

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

PHP クラスの使用法の詳細な説明: コードをより明確で読みやすくします。 PHP クラスの使用法の詳細な説明: コードをより明確で読みやすくします。 Mar 10, 2024 pm 12:03 PM

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

PHP8.0のイベント処理ライブラリ:イベント PHP8.0のイベント処理ライブラリ:イベント May 14, 2023 pm 05:40 PM

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

Vue エラー: v-bind を使用してクラスとスタイルを正しくバインドできません。解決方法は? Vue エラー: v-bind を使用してクラスとスタイルを正しくバインドできません。解決方法は? Aug 26, 2023 pm 10:58 PM

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

See all articles