質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

1回答

150閲覧

【PHP】クラスのメンバ変数へのアクセス方法について

awesome_suba

総合スコア6

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/10/25 11:37

###【PHP】クラスのメンバ変数へのアクセス方法について
AとB、2つのシステムで共通のDBへ接続しています。
AはWebシステムで、Bはバッチ処理のみ行います。

Aで生成したhogeクラスのインスタンスをシリアル化してDBに登録します。
Bはそれをデコードし、バッチ処理に使用します。

私はいま、Aで一度登録したレコードにあるhogeクラスの
インスタンスの内容を変更して、レコードをupdateする機能を作成しています。

しかし、hogeクラスのメンバ変数がprotectedになっており、なおかつ、
そのクラスにはメンバ変数を操作するためのメソッドを持っていません。
(Aでは登録のみ、Bで細かく操作する使い方のため)

私はこの問題への対応としてhogeクラスに__get/__setを追加しました。

###質問したい点

その対応方法を先輩エンジニアに見てもらったところ、
下記のような意見をもらいました。

・メンバ変数にアクセスできる方法が増えたため、他の使用箇所でもテストが必要になる
・新しくサブクラスを作り、メンバ変数はそちらで操作すべき

この話を聞いたときはなるほど、と思いましたが、
実際にこれをどのように実現するのかがわかりません。
(残念ながら、そのエンジニアは休職してしまいました)

hogeクラスを継承したサブクラスを作ったとして、一度作られたインスタンスを
サブクラスへキャストし、再度スーパークラスへキャストする方法があるのでしょうか。

それともサブクラスを活用する別の方法で、インスタンスの中身を変更し、
再度スーパークラスとしてDBに登録することができるのでしょうか。

###回避策として
汎用的な__get/__setを使うのが問題であるならば、アクセスしたいメンバ変数用の
getter/setterを個別に作成すればokではないかと考えております。

この方法の問題点があれば、ご教示ください。

以上です。

よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

php

1<?php 2 3class ParentCls 4{ 5 protented $prop; 6}

php

1<?php 2 3class Clazz extends ParentCls 4{ 5 public function getProp() { 6 return $this->prop; 7 } 8 9 public function setProp($prop) { 10 $this->prop = $prop; 11 } 12}

php

1<?php 2 3$cls = new Clazz(); 4$cls->setProp('test'); 5$val = $cls->getProp(); 6var_dump($val);

投稿2017/10/25 13:01

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問