PHPのクラスで定数配列を作る方法

このQ&Aのポイント
  • PHPのクラスで定数配列を作る方法について解説します。
  • PHP5.6で定数配列を作成する方法について詳しく説明します。
  • クラスで定数配列を作成することは可能です。具体的な方法を紹介します。
回答を見る
  • ベストアンサー

PHPのクラスで定数配列を作りたい

こんばんわ。 PHP5.6で勉強しています。5.6を選んだのは事例が多いと思ったからです。 文字列の定数配列が作れるならば、クラスの定数配列も作れるだろうと思っていましたが うまくできません。 イメージ的には以下のような感じです。 クラスで定数配列を作成することはできますでしようか? class AnimalItem { protected $_eng ; protected $_jpn ; protected $_deu ; function __construct( $eng, $jpn, $deu ) { $this->_eng = $eng ; $this->_jpn = $jpn ; $this->_deu = $deu ; } } class Foo { // const ANIMALS = array( 'dog', 'cat', 'bird'); const ANIMALS = array( new AnimalItem( 'dog', '犬', 'Hund' ) ,new AnimalItem( 'cat', '猫', 'Katze' ) ,new AnimalItem( 'bird', '鳥', 'Vogel' ) ); }

  • PHP
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5080/13275)
回答No.1

const で定義した定数の中にオブジェクトインスタンスを入れる事はできないので「new AnimalItem( 'dog', '犬', 'Hund' )」はエラーになります。

TeijigoTeatime
質問者

お礼

早々のレスありがとうございます。 なるほど入れることはできないのですね。 参考になりました。 急な出張で返事が遅れました。申し訳ありません。

関連するQ&A

  • PHP5でクラス定数が使えますが

    PHP5でクラス定数が使えますが 以下のようにFで A + Eや A | Eなどとすると、 Parse errorとなります。 クラス定数は数値、文字列、配列のみで、組み合わせは不可という仕様で良いのでしょうか? PHP5の仕様書というものはネット上で存在しているのでしょうか? 英語でも構いませんので、ご存知の方教えてください。 class Test { const A=1; const B="2"; const C=array(3); const E=4; const F=A+E; // ここでエラー } この場合の対策ですが、素直にPHP4のように defineを使えば良いでしょうか?

    • ベストアンサー
    • PHP
  • 定数配列の書き方

    VB6で定数を定義する場合は次の通りです。   Const strTest As String = "TEST" では、定数配列を定義する場合はどのように書けばいいのでしょう?   Const astrTest() As String = Array("A", "B", "C")      '→NG   Const astrTest(0 To 2) As String = Array("A", "B", "C")  '→NG いろいろな書き方を試して見たのですが、上記のような書き方でも文法的にエラーになるようです。 どのように書けばいいのでしょうか? それとも定数を配列で定義するのは無理なんでしょうか?

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

    抽象クラスを継承した普通のクラスから、 抽象クラス内で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
  • perlのクラスについて

    perlでクラスを作成しています。その際、コンストラクタnewで無名配列を定義して、funcメソッドで、この無名配列に値をいれるにはどうすればよいでしょうか? sub new { my $class = shift; my $self->array = []; bless($self, $class); return $self; } sub func { my $self = shift; $self->arrayに配列のデータを入れる。 }

    • ベストアンサー
    • Perl
  • C#の配列の定数

    BCCを使用していたのですが、最近VS2013でC#を勉強し始めました フォームの指定した位置にいくつかのボタンを設置し、あらかじめ定義しておいた テーブルからボタンのtextを表示したいと思い、以下のようにコーディングしたのですが エラーが出てしまい思ったような結果に持って行くことができません C#ならこうした方がいいという指摘も含めて どうやるのがいいのか ご教授ください 足りない情報があれば追加します ちなみにまだテスト段階だから2列定義して1列しか表示するようにしかなってません ----------------------------------------------------------------------- using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace haneda { public partial class Form1 : Form { private Button[] buttons; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { int i; //ボタンコントロール配列の作成 this.buttons = new Button[table.MAX_R]; for (i = 0; i < buttons.Length; i++) { //ボタンコントロールのインスタンス作成 this.buttons[i] = new Button(); //プロパティ設定 this.buttons[i].Name = "btn" + i.ToString(); this.buttons[i].Text = table.roomNo[1, i]; <=ここがエラー this.buttons[i].Top = table.roomX01[i]; <=ここがエラー this.buttons[i].Left = table.roomY01[i]; <=ここがエラー this.buttons[i].Click += new System.EventHandler(button_Click); //コントロールをフォームに追加 this.Controls.Add(this.buttons[i]); } } private void button_Click(object sender, System.EventArgs e) { Button btn = (Button)sender; MessageBox.Show(btn.Name); } } public class define { public const bool IGNORE = false; //非表示 public const bool EFFECT = true; //表示 /* 最大値 */ public const int MAX_F = 2; //フロア数 public const int MAX_R = 3; //ルーム数 } public class table { /* ナンバー */ public readonly string[,] roomNo = new string[define.MAX_F, define.MAX_R] { { "101", "102", "103"}, { "201", "202", "203"} } /* 表示・非表示 */ public readonly bool[,] effectRoom = new bool[define.MAX_F, define.MAX_R] { {EFFECT, IGNORE, EFFECT}, {EFFECT, EFFECT, EFFECT} } public readonly int[] roomX01 = new int[define.MAX_R] { 5, 70, 135 } public readonly int[] roomY01 = new int[define.MAX_R] { 100, 100, 100 } } }

  • クラスの中の配列へのアクセス

    お世話になります。 昨日?に似たような質問をさせていただきましたが、またよろしくお願いいたします。 以下のようなクラスがあります。 (自分で動かして確認したいのですが、今確認する環境がないので申し訳ありませんがご回答お待ちしてます) class Class1{   var $list; // 添字が数値のの配列です   …   function getList(){     return $this->list;   } } $a = new Class1; $a->getList()->[0] ↑上のようなやり方で、Class1の$listの配列の1番目(0番目)の要素を取得したいのですが、これは可能なのでしょうか? 何卒よろしくお願い致します。

    • ベストアンサー
    • PHP
  • クラスの中のクラスへのアクセス

    お世話になります。 クラスが以下のようにあります。 class ClassName1{ var $classname2_obj; // クラス「ClassName2」のオブジェクト function getClassName2Obj(){ return $this->$classname2_obj; } } class ClassName2{ var $array_list; // 配列です  function getArrayList(){ return $this->array_list; } } やりたいのは、ClassName1のgetClassName2Obj関数でClassName2の配列をgetArrayListで取得したいのです。 $a = new ClassName1; $b = $a->getClassName2Obj(); $c = $b->etArrayList(); 上の$b = … と$c = …の部分の処理を一行にまとめることはできないでしょうか? 何卒よろしくお願い致します。 PHPは5です。

    • ベストアンサー
    • PHP
  • JSのクラスについての質問

    JSのクラスについての質問 ソース class Cat { constructor(name) {this.name = name} meow() {alert( this.name + 'はミャオと鳴きました' )} } //インスタンス作成 var clsObj = new Cat("my cat"); //インスタンス(オブジェクト)の中身を出力 console.log(clsObj); 初心者なのでこの中のどの記述が必須で、 またnameはどれと対になっているかがわかりません。 インスタンスはnew クラス名 となっている所で作成されて変数に作られたインスタンスが代入されるというのは何となく分かったのですが、 console.log(clsObj); VM793:9 Cat {name: "my cat"} となるのがいまいちわかりません。 new Cat("my cat");は class Cat { constructor(name) {this.name = name} meow() {alert( this.name + 'はミャオと鳴きました' )} } を実行するという事で、 引数は constructor(name) new Cat("my cat"); が対になっているのでnameがmycatに代わるという事でしょうか? new Cat("my cat");が実行された結果がインスタンスという事ですが、 mycatがインスタンスなのですか? 大変恐縮ですが、簡単に一連の流れを教えていただければ幸いです。 class Cat { constructor(name) {this.name = name} meow() {alert( this.name + 'はミャオと鳴きました' )} } にどう渡されてどのように処理され何がインスタンスとして吐き出されるのでしょうか?

  • 別ファイルに配列を渡して、別ファイルのクラスを実行

    index.phpから別ファイルのclass.phpに配列を渡して、 クラスを実行したいと考えています。 //----------------------------------- //-- index.php --- <?php class hiragana { public $a_ka_sa; function init() { $this->a_ka_sa = array(); } } $j_hiragana = new hiragana(); $val[0] = array('a'=>'あ' , 'i'=>'い' , 'u'=>'う' , 'e'=>'え' , 'o'=>'お'); $val[1] = array('ka'=>'か' , 'ki'=>'き' , 'ku'=>'く' , 'ke'=>'け' , 'ko'=>'こ'); $val[2] = array('sa'=>'さ' , 'si'=>'し' , 'su'=>'す' , 'se'=>'せ' , 'so'=>'そ'); $j_hiragana->a_ka_sa[0] = (object) $val[0]; $j_hiragana->a_ka_sa[1] = (object) $val[1]; $j_hiragana->a_ka_sa[2] = (object) $val[2]; var_dump($j_hiragana); //----------------------------------- このようになっているプログラムを //----------------------------------- //-- index.php --- <?php $val[0] = array('a'=>'あ' , 'i'=>'い' , 'u'=>'う' , 'e'=>'え' , 'o'=>'お'); $val[1] = array('ka'=>'か' , 'ki'=>'き' , 'ku'=>'く' , 'ke'=>'け' , 'ko'=>'こ'); $val[2] = array('sa'=>'さ' , 'si'=>'し' , 'su'=>'す' , 'se'=>'せ' , 'so'=>'そ'); //----------------------------------- 配列の部分だけindex.phpに残して //----------------------------------- //-- class.php --- <?php class hiragana { public $a_ka_sa; function init() { $this->a_ka_sa = array(); } } $j_hiragana = new hiragana(); //-------------- // $val[0] = array('a'=>'あ' , 'i'=>'い' , 'u'=>'う' , 'e'=>'え' , 'o'=>'お'); // $val[1] = array('ka'=>'か' , 'ki'=>'き' , 'ku'=>'く' , 'ke'=>'け' , 'ko'=>'こ'); // $val[2] = array('sa'=>'さ' , 'si'=>'し' , 'su'=>'す' , 'se'=>'せ' , 'so'=>'そ'); //-------------- $j_hiragana->a_ka_sa[0] = (object) $val[0]; $j_hiragana->a_ka_sa[1] = (object) $val[1]; $j_hiragana->a_ka_sa[2] = (object) $val[2]; //----------------------------------- class.phpに移して、 index.phpを開くとclass.phpのクラス?に配列を渡しクラス?を実行する プログラムを作りたいと考えていますが、 うまく配列を渡してクラス?を実行できません。 どのようにすればよいのでしょうか?

    • 締切済み
    • PHP
  • arrayの中から一番近くて大きい数字(誤差は+4以内)を返したいです。

    arrayの中から一番近くて大きい数字(誤差は+4以内)を返すにはどうしたらいいでしょうか。 var cat_array = new Array(2,7,11,17,21); var dog_array = new Array(3,14,20); myFunction("cat",5); function myFunction(m,n){ // ここがわからない。 r=7; return r;// cat_arrayの中から 5 に一番近くて大きい 7 を返す。 } arrayの中に誤差+4以内の数字がない場合は、そのままの数字を返したいです。 例: myFunction("dog",4);// dog_arrayの中に4,5,6,7,8がないので、そのまま 4 を返す。 よろしくお願いします。m(_ _)m

    • ベストアンサー
    • Flash

専門家に質問してみよう