• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:クラスで永続的な値を持たせたい)

クラスで永続的な値を持たせる方法

uchacの回答

  • ベストアンサー
  • uchac
  • ベストアンサー率100% (2/2)
回答No.1

以下のように static なメンバ変数で値を共有するってのはどうでしょう。 サブクラスからは、parent::$ID という形で参照します。 <?php class oya { protected static $ID = 0; function setID($id) { self::$ID = $id; } function getNextID() { return self::$ID + 1; } function printID() { echo "\n ID = ". self::$ID ; } } class sub1 extends oya { function sub1 () {$this->setID($this->getNextID());} } class sub2 extends oya { function sub2 () {$this->setID($this->getNextID());} } $sub1 = new sub1();//←IDが1になる $sub1->printID(); $sub2 = new sub2();// $sub2->printID(); ?>

takagoo100
質問者

お礼

ご返答ありがとうございます。 そのやり方でできました。ありがとうございます。

関連するQ&A

  • 永続化前後のクラスの表現について C#

    ものすごくくだらない質問ですみません。 リレーショナルデータベースを使わざるを得なく、O/Rマッピングツールは使えない状況です。 class Employee があります。 StaffCodeがありますが、将来このコードが重複はありませんが変わる可能性があるので永続化を目的としてこれを主キーとして使えません。 そこで主キーにサロゲートキーを使おうと考えました。 アプリ側で対応するよりもデータベース側でオートナンバーを使います。 一応下記コードでこれから採番する社員と、永続化&採番したあとの社員を表現する事はできます。 しかし同じクラスを使うものなのでしょうか? クラスを分けるべきでしょうか? そもそも考え方がおかしいですか? Class Employee { Public Int Id { get; private set; } Public String Name { get; private set; } Public Int StaffCode { get; private set; } Public Employee(String name, Int staffCode) { this.Name = name; this.StaffCode = staffCode; } Public Employee(Int id, String name, Int staffCode) { this.Id = id; this.Name = name; this.StaffCode = staffCode; } Public Void SetId(Int id) { this.Id = id; } }

  • クラスを継承するか、変数に入れて持ち回すか?

    掲示板のような仕組みを作っています。 そこで、とりあえず先にHPのヘッダーをと思いPHPRequestというクラスを作りました ユーザーエージェントを元に、Doctypeや文字コード、アクセスしたディレクトリ情報が入っているものです これをヘッダーに継承させるか、変数に放り込んで掲示板の方にも使い回しするかで悩んでいます。 リクエスト class PHPRequest { function PHPRequest() { xxxxx } } ******************************** パターンA class PageHeader extends PHPRequest { } class BBS extends xxxxx { function BBS() { $request = new PHPRequest; } } ******************************** パターンB $request = new PHPRequest; class PageHeader { function PageHeader($request) { $this->xxxx=$request; } } class BBS extends xxxxx { function($request) { $this->xxxx = $request; } } どちらの使い方が正しいのでしょうか? 二通りのやり方をやってみましたけど、特段速度に差があるようにも思えないんです… クラスの考え方が基本的に間違えてるっていうことでしたら、間違えてると言ってくださった方がスッキリします どうも気になって先に進めないので教えてください! お願いします!

    • ベストアンサー
    • PHP
  • クラスの設計の問題

    今C++でクラスの設計をしています。 どう設計すれば、いいか分からないので、しっている方に教えていただきたいですが。 class A{ private: int id; public: int getId(); void setId(); }; class B{ private: int id; public: int getId(); void setId(); } class C{ private: int id; public: int getId(); void setId(); } この三つのクラスが、共通な機能があります。また、実装も同じで、 継承を利用して、どう設計すれば、いいですか? よろしくお願いします。

  • 抽象クラスを継承した普通のクラスから、

    抽象クラスを継承した普通のクラスから、 抽象クラス内でprotected宣言したクラスのフィールド(連想配列)へ データをセット&ゲットしてみたいのですが、やり方がよく分かりません。 上記内容を満たす簡単なサンプルを誰か作っていただけないでしょうか。 ちなみに、下記は、自分でやろうとして、頭がこんがらがってしまった例です。 あくまでもイメージですが、 こんな感じで、作成していただけると、うれしいです。 <?php abstract class A1{ protected $data = array();   public function setData($value){ $this->data[$key] = $value; } public function getData($key = null){ if (null == $key) { $this->data; } else { $this->data[$key]; } } } class C1 extends A1{ public function main(){ $this->setData('key1') = 'value1'; $this->setData("キー2") = "値2"; } } $c1 = new C1; $c1 -> main(); var_dump($data); ?>

    • ベストアンサー
    • PHP
  • 初歩的な質問ですみません。

    はじめまして。Javaの初心者です。 初歩的なことで、どうしてもわからないことがあります。 以下のような場合、 *************************************** class Oya { void func() { System.out.println("Oya"); } } class Ko extends Oya { Ko() { this.func(); } } class Main { public static void main(String[] args) { new Ko(); } } *************************************** Koクラスが初期化を完了していないのにもかかわらず func()メソッドを呼びさせてしまう理由がわかりません。なぜなのでしょうか?どうか教えてください。

    • ベストアンサー
    • Java
  • 総称型のキャストでエラー

    下の書き方で、※1はエラーにならないのですが ※2ではエラーになります。 ※1がキャスト可能であれば、 ※2も可能だとおもうのですが。 Java7を使っています。 public class Soushou { void test() { List<Kodomo> kodomoList = new ArrayList<Kodomo>(); List<? extends Oya> oyaList = kodomoList; Object o1 = (List<Oya>) oyaList; // ※1 エラーにならない。 Object o2 = (List<Oya>) kodomoList; // ※2 「キャストすることができません」エラーになってしまう。 } } class Oya { // 親クラス } class Kodomo extends Oya { // 親クラスを継承した子クラス }

    • ベストアンサー
    • Java
  • 親クラスと子クラスのフィールドとメソッドについて

    親クラスと子クラスのフィールドとメソッドについて 以下のサンプルソースを実行した時の動作の原理について 教えてください。 oya型変数にkoクラスのインスタンスを作成した場合、 メソッドはkoクラスのものなのに、 フィールドはoyaクラスのものになるということが イマイチすっきり理解できません。 どういうことなんでしょうか。 ------------------------------------------------------- [ソース] public class exec { public static void main( String args[]){ oya obj = new ko(); System.out.println(obj.str_field); obj.disp_field(); } } public class oya{ String str_field="親実行"; public void disp_field(){ System.out.println(str_field); } } public class ko extends oya { String str_field = "子実行"; public void disp_field(){ System.out.println(str_field); } } ------------------------------------------------------- [実行結果] > 親実行 > 子実行 -------------------------------------------------------

    • ベストアンサー
    • Java
  • インターフェイス 抽象クラス

    PHP初心者です。 xampp1.7.0(最新)でアパッチなど一括ダウンロード クラスの概念は分かりましたが、インターフェイス、及び抽象クラスについて理解が追い付きません。 下記コードをご覧ください。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <? abstract class AbstractClass { abstract public function test1(); } class Impl1 extends AbstractClass { public function test1() { print "こんにちは\n"; } } class Impl2 extends AbstractClass { public function test1() { print "ありがとう.\n"; } public function hoge() { print "さようなら\n"; } } $i1 = new Impl1(); $i1->test1(); $i2 = new Impl2(); $i2->test1(); ?> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 抽象クラスが上にありますが、中身がないので継承し、そのクラスの中で処理させています。抽象クラスの必然性が理解できません。まあこのコード事態がものすごく短いので、その必然性がないと思うのですが、例えばもっと長いコードになったときなどは抽象クラスは絶対使った方がいいということになるのでしょうか。 さらに全て抽象クラスであればインターフェイスを利用できるようですが、インターフェイスのメリットにつき理解が追い付きません。 どなたかご教授お願いいたします。

    • ベストアンサー
    • PHP
  • クラスの使い方

    php5です。 --- test1.class.php --- class TEST1 { function hoge1() { // 実際に複雑な処理ですが概要として簡易化してます $aaa = 'hoge1'; // クラスの実行で単純に戻り値を返す return $aaa; } } --- test2.class.php --- class TEST2 { function hoge2() { // 実際に複雑な処理ですが概要として簡易化してます $bbb = 'hoge2'; // クラスの実行で単純に戻り値を返す return $bbb; } } --- MySmarty.class.php --- require_once 'test1.class.php'; require_once 'test2.class.php'; class MySmarty extends Smarty { function MySmarty() { //ここでclassTEST1,2の戻り値を利用しif文で分岐をしたい if ($aaa == 'hoge1') { $ccc = 'あああ'; } elee { $ccc = 'いいい'; } if ($bbb == 'hoge2') { $ddd = 'ううう'; } elee { $ddd = 'えええ'; } $this->assign('aaa', $aaa); $this->assign('bbb', $bbb); ・・・ } } このような使い方はできないものでしょうか?クラスに触れてまだ間も無く理解も深めれて いない状態で参考サイトなどを調べてみたのですがこのような使い方を書いている説明は みつかりませんでした。 思いつく方法としてはMySmartyに継承すればいいようなのですが継承は1つまでと 制限があるようでそれもできない状態です。 単純に1つのクラスにまとめて書けば済むような気もあるのですが他にも別のクラスの 戻り値を利用して分岐等をさせたく思っているのですがこの場合どうすればいいのでしょうか? もし不可能な場合(可能だけど方法的に良くない場合)の別の方法としてアドバイスを 頂けますと幸いです!宜しくお願いします!

    • 締切済み
    • PHP
  • 継承クラスで定義したメソッドのtry-catch文

    親クラスで、子クラスで実装されたメソッドのExceptionをキャッチしたいのですが、 うまくいきません。 何か良い方法はないでしょうか? abstract class A { public __construct(){ try{ $this->testA(); }catch(Exception $e){ var_dump(1); } } abstract function testA(); } class B extends A { function testA(){ throw Exception('test',1); } } try{ new B; }catch(Exception $e){ var_dump(2); // こっちが動く } よろしくお願いします。

    • ベストアンサー
    • PHP