【PHPプログラミング】例えばベースurlみたいな情報を、複数のclass内で使いまわしたい(constクラス定数)
| 更新: 2024/05/12 | 2454文字
今回は、PHPプログラミング『constクラス定数』について扱います。PHPには定数を定義するファンクション『define』がありますが、クラス定数で使いまわすには、どのように書けばよいのでしょうか。早速確認していきましょう。
目次
今回の趣旨、ベースurlなどを使いまわしたい
ちょくちょくこのサイトに登場して、最近も管理人が作っていた『getsimple改造CMS』のフロント記事取得ファイルです(コントローラー内にgetPageClassというクラスを作った)。この段階ではテストだったので、urlは直接書いて指定しています。
しかし、他のクラスが増えたり、ページが増えてきた場合、他のサーバーに上げる場合は、urlを全部変更するのが非常にめんどくさく、変更抜けが発生する可能性があります。これをクラス内定数で使いまわしてラクにしようというのが、今回の趣旨です。
PHPでの定数定義~constやdefine
PHPでの定数定義ファンクションというと、まずdefineがあげられます。システム上、configにまとめて設定されていることも多いような気がします。
define(PHPマニュアル)
https://www.php.net/manual/ja/function.define.php
このほかに、オブジェクト型で書いて、クラス定数として使う場合は『const』があります。今回はこちらの書き方でやってみましょうか。
const(PHPマニュアル)
https://www.php.net/manual/ja/language.oop5.constants.php
コードと表示例
前提~今回エディットするファイル内にあるクラス構成
現在作っているgetsimple改造CMSは、フロントは結構自由に作れるというのを狙っているんですが、フロント用のコントローラーを用意して、その中にクラスを3つ用意しています。『自クラスからロード』と『他クラスからロード』で書き方が違うという点を押さえていただければと思います。
クラス名 | 内容 |
---|---|
getPageClass | 固定ページ用記事を取る |
getSingleClass | ブログ用記事を取る |
getArchiveClass | ブログ一覧を取る |
クラスごとの書きかた
まずは、固定ページ用getPageClassに、constでリンクのベースurlを定義しました。自クラス内での呼び出しなので『self::定数名』で呼び出せます。なお、クラス名がきちんと指定されていれば『クラス名::定数名』でも呼び出せるのを確認しました。どちらでもokですが、自クラスのときはself::定数名がスマートですね。
const BASEURL = ‘http://localhost/gs-ce’;
中略~
public function getFixedPage($pageName){
switch ($pageName) {
case 'front-page': $url = self::BASEURL ."/GetSimpleCMS/?id=index"
中略~
}
}
}
別のクラス『getSingleClassまたはgetArchiveClass』から呼び出すときは、クラス名が違うのでselfではなく『クラス名::定数名』で呼び出します。 getSingleClassまたはgetArchiveClassのときはこんな感じで書きました。
中略~
public function __construct($arch_num){
$url= getPageClass::BASEURL . '/GetSimpleCMS/?archive='.$arch_num ;
中略~
}
中略~
}
これでコントローラーに指定された全部のクラスで定数ロードできるはずです(ロードできない場合は、エラーで記事が表示されない)。
表示例(ロードできたか?)
それでは、上記の書き方できちんと定数がロードできたか確認しましょう。定数がロードできない場合は、記事取得urlが不完全になるので、エラーで記事が表示されなくなります。
まずはフロントページ(getPageClass)。ここはMV下のコメントをCMSから出力するようにしていますが・・ okです。表示されました。
次に、一覧部分(getArchiveClass)。 こちらもokですね。
最後に、個別のブログ記事(getSingleClass)。 こちらもok。
あとがき・まとめ
- PHPの定数定義にはdefineとconstがあり、クラス定数として使いたい場合はconstを使う
- 定義されたクラスと使用されるクラスが同じ場合は、self::定数名で呼び出せる
- 定義されたクラスと使用されるクラスが違う場合は、クラス名::定数名と書く
まとめると、こんなところでしょうか。サイト/システム全体のconfigにはdefineを使うとしても、クラス内/外のときは『self::定数名/クラス名::定数名』などを使ってもokです。うまく使いまわして工数を削減しましょう。
【カテゴリ】- PHP
【タグ】- GetSimple-CMSをヘッドレスにするシリーズ