ホームページ バックエンド開発 PHPチュートリアル php幻术方法: _get() 和 _set()的妙用

php幻术方法: _get() 和 _set()的妙用

Jun 13, 2016 am 10:40 AM
array property the this title

php魔术方法: __get() 和 __set()的妙用

?

<?phpclass Post {  private $title;  private $content;  private $author;  private $comments;  private $_getters = array('title', 'content', 'author', 'comments');  private $_setters = array('title', 'content', 'author');    public function __get($property) {    if (in_array($property, $this->_setters)) {      return $this->$property;    }    else if (method_exists($this, '_get_' . $property))      return call_user_func(array($this, '_get_' . $property));    else if (in_array($property, $this->_getters) OR method_exists($this, '_set_' . $property))      throw new Exception('Property "' . $property . '" is write-only.');    else      throw new Exception('Property "' . $property . '" is not accessible.');  }  public function __set($property, $value) {    if (in_array($property, $this->_getters)) {      $this->$property = $value;    }    else if (method_exists($this, '_set_' . $property))      call_user_func(array($this, '_set_' . $property), $value);    else if (in_array($property, $this->_setters) OR method_exists($this, '_get_' . $property))      throw new Exception('Property "' . $property . '" is read-only.');    else      throw new Exception('Property "' . $property . '" is not accessible.');  }}?>This way the variables in the $_getters array can be read from the outside and the variables in the $_setters array can be modified from the outside, like this:<?php$post = new Post();$post->title = 'Hello, World';echo $post->title;// The following will throw an exception since $comments is read-only:$post->comments = 23;?>And in case you need a less generic getter or setter at some point, you can remove the variable from the $_getters or $_setters array and implement a method like:<?phpprivate function _set_title($value) {  $this->title = str_replace('World', 'Universe', $value);}?>And from the outside the property could still be used with:<?php$post->title = 'Hello, World!';?>
ログイン後にコピー

?上面是手册里的例子,但是我觉得应该是先判断类里面是否有处理属性的方法,有的话就调用该方法,没有就直接设置该属性。

?

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

2か月後、人型ロボットWalker Sが服をたたむことができるようになった 2か月後、人型ロボットWalker Sが服をたたむことができるようになった Apr 03, 2024 am 08:01 AM

Machine Power Report 編集者: Wu Xin 国内版の人型ロボット + 大型模型チームは、衣服を折りたたむなどの複雑で柔軟な素材の操作タスクを初めて完了しました。 OpenAIのマルチモーダル大規模モデルを統合したFigure01の公開により、国内同業者の関連動向が注目を集めている。つい昨日、中国の「ヒューマノイドロボットのナンバーワン株」であるUBTECHは、Baidu Wenxinの大型モデルと深く統合されたヒューマノイドロボットWalkerSの最初のデモを公開し、いくつかの興味深い新機能を示した。 Baidu Wenxin の大規模モデル機能の恩恵を受けた WalkerS は次のようになります。 Figure01 と同様に、WalkerS は動き回るのではなく、机の後ろに立って一連のタスクを完了します。人間の命令に従って服をたたむことができる

PHP 注意: 非オブジェクトのプロパティを取得しようとしています - 解決策 PHP 注意: 非オブジェクトのプロパティを取得しようとしています - 解決策 Aug 17, 2023 am 09:27 AM

PHP Notice: Tryingtogetpropertyofnon-object-Solution PHP 開発プロセス中に、「Tryingtogetpropertyofnon-object (非オブジェクトのプロパティを取得しようとしています)」という一般的なエラー メッセージが表示されることがあります。このエラーは通常、オブジェクト型ではない変数のプロパティにアクセスしようとした (またはメソッドを呼び出した) ときに発生します。この記事ではこれについて紹介します

PHP への解決策 注意: 未定義のプロパティ: PHP への解決策 注意: 未定義のプロパティ: Jun 22, 2023 pm 02:48 PM

PHP でコードを作成するときに、「通知: 未定義のプロパティ」というエラー メッセージが表示される場合があります。このエラーは、未定義のプロパティにアクセスしていることを意味します。通常、そのプロパティがコード内で初期化されていないことが原因です。では、この問題をどうやって解決すればよいでしょうか?考えられる解決策は次のとおりです。 プロパティを初期化する これは、この問題を解決する最も簡単な方法です。コード内でプロパティを明示的に初期化すると、使用前にプロパティが確実に定義されます。例: クラス

C# の Array.Sort 関数を使用して配列を並べ替える C# の Array.Sort 関数を使用して配列を並べ替える Nov 18, 2023 am 10:37 AM

タイトル: Array.Sort 関数を使用して C# で配列を並べ替える例 本文: C# では、配列は一般的に使用されるデータ構造であり、多くの場合、配列を並べ替える必要があります。 C# には Array クラスが用意されており、このクラスには配列を簡単に並べ替えるための Sort メソッドがあります。この記事では、C# で Array.Sort 関数を使用して配列を並べ替える方法を示し、具体的なコード例を示します。まず、Array.Sort 関数の基本的な使用法を理解する必要があります。 Array.So

TypeError: Vue で null のプロパティ 'XXX' を読み取れません。どうすればよいですか? TypeError: Vue で null のプロパティ 'XXX' を読み取れません。どうすればよいですか? Nov 25, 2023 pm 01:21 PM

Vue は、ユーザー インターフェイスを構築するための人気のある JavaScript フレームワークです。開発プロセス中に、さまざまなエラーや例外が発生することがあります。よくあるエラーの 1 つは、「TypeError:Cannotreadproperty'XXX'ofnull」です。この記事では、このエラーの原因とその修正方法について説明します。まず、このエラーの背後にある理由を理解しましょう。オブジェクトのプロパティまたはメソッドにアクセスしようとすると、そのペアが

タイトルの意味は何ですか タイトルの意味は何ですか Aug 04, 2023 am 11:18 AM

タイトルは、Web ページのタイトルを定義する意味です。タグ内にあり、ブラウザのタイトル バーに表示されるテキストです。タイトルは、検索エンジンの最適化と Web ページのユーザー エクスペリエンスにとって非常に重要です。 HTML Web ページを作成するときは、より多くのユーザーがクリックして閲覧できるように、関連するキーワードと魅力的な説明を使用してタイトル要素を定義することに注意する必要があります。

TypeError: Vue で未定義のプロパティ '$XXX' を読み取れません。解決策は何ですか? TypeError: Vue で未定義のプロパティ '$XXX' を読み取れません。解決策は何ですか? Nov 25, 2023 am 10:00 AM

TypeError:Vue で定義されていないプロパティ '$XXX' を読み取れません。解決策は何ですか? Vue 開発では、TypeError:Cannotreadproperty'$XXX'ofundefine などのエラーが頻繁に発生します。このエラーは通常、Vue インスタンスで未定義のプロパティまたはメソッドを使用したことが原因で発生します。このエラーが発生した場合、次のことを行う必要があります。

PHPのarray_merge_recursive()関数を使用するシンプルで明確な方法 PHPのarray_merge_recursive()関数を使用するシンプルで明確な方法 Jun 27, 2023 pm 01:48 PM

PHP でプログラミングする場合、多くの場合、配列をマージする必要があります。 PHP には、配列のマージを完了するための array_merge() 関数が用意されていますが、配列内に同じキーが存在する場合、この関数は元の値を上書きします。この問題を解決するために、PHP は配列をマージして同じキーの値を保持できる array_merge_recursive() 関数を言語で提供し、プログラム設計をより柔軟にします。配列マージ

See all articles