LoginSignup
mikayume
@mikayume

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

定数化解決方法

Q&AClosed

解決したいこと

$x = 123456789;
$y = substr($x,3,2); //

例)
$y = substr($x,3,2)には2を定数化にしたいです。
環境はPure phpです。
解決方法を教えて下さい。

例)
私は下記の順番で実装しましたが、間違っていると気がします。
例)

1)cfgファイルにconst cfg_y = '2';
2) Sendclassの中にinitファイルから呼び出している。

0

1Answer

特に記載が無いのと,最初に出たリファレンスページが 8 だったので,
PHP8 と仮定します.

define では特に問題無く下記のコードが動作しました.
constだと駄目なようでした.

<?php

define('AAA', 123456789);
define('BBB', substr(AAA, 3, 2));

var_dump(AAA);
var_dump(BBB);
$ php a.php
int(123456789)
string(2) "45"

参考

0

Comments

  1. @mikayume

    Questioner

    @atm-snag

    お忙しい中ご回答いただきありがとうございます。
    現状はもとのコードに基づいて改修しております。
    今定数化にしたいのはそれではなく桁数の範囲です。下記の通りです。

    abc = substr($x,3,2);

    "abcの桁数はハードコーディングせずに定数とする'。桁数が2から3からに変更する際は、定数の変更のみ対応可能とする'.

    configファイルは別のcfgファイルです。
    呼び出したいクラスは別です。
    getter,setterとかで作成必要かですか?
  2. すみません,何ができないか説明は可能でしょうか?

    ```php
    <?php

    define('AAA', 123456789);
    define('cfg_y', 2);
    define('BBB', substr(AAA, 3, cfg_y));
    // const AAA = 123456789;
    // const cfg_y = 2;
    // const BBB = substr(AAA, 3, cfg_y);

    var_dump(AAA);
    var_dump(BBB);
    ```

    `cfg_y` を定数として定義しても動作するように見えます.

    例えば,短いソースコードで問題を再現できますでしょうか?
  3. @mikayume

    Questioner
    早めにご回答いただきありがとうございます。
    今いただきたコードもご参照させていただきます。
    私の質問は不足して申し訳ありません。

    今現場の環境にはDBはまだですので私は画面上に確認はできなくて
    コードを見た目だけで書いております。なので現状のコード上では
    操作確認はできません。見た目で自分が書いたコードが認識が違うと
    リダーさんから指摘がありました。
    上記の通りclassからconfigファイルに設定した値を使える方法は
    よくわかりませんのでその方法を教えていただきたいです。

    私は実装したコードは下記のインメージです。
    getIniValueを使うのは既存コードを参照して書きました。
    間違ったらクラスから呼び出したコードと思います。

    (1)

    config.php

    const cfg_y = 2;

    (2)
    Class AA {
    private $cfg_y;

    $this->cfg_y = $this->getIniValue('test','testA');
    $abc = substr(AAA, 3, $this->cfg_y);
    }
  4. 業務のコードですと外に出すのが問題になるかもしれないので,
    リーダーさんに確認した方が良いかもしれません.

    一応現時点では,

    ```php:a.php
    <?php

    require_once("./config.php");

    class AA {
    function test() {
    return cfg_y;
    }
    }
    ```

    ```php:config.php
    <?php

    const cfg_y = 2;
    ```

    こんな感じでも動いています.
  5. @mikayume

    Questioner
    ありがとうございます。🙇‍♂️🙇‍♂️ 勉強になりました。
    上記のコードを参照して解決できました。
    優しく説明いただき心から感謝しております。
    よろしくお願いたします。
  6. 解決したなら良かったです!

Your answer might help someone💌