Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
@eiswezinoo
Revisions
Report this question
Subscribe question
Help us understand the problem. What is going on with this question?
Q&A
Closed

定数化解決方法

Q&A
Closed

解決したいこと

$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
1
Answer

特に記載が無いのと,最初に出たリファレンスページが 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

@atm-snag

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

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

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

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

```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` を定数として定義しても動作するように見えます.

例えば,短いソースコードで問題を再現できますでしょうか?
早めにご回答いただきありがとうございます。
今いただきたコードもご参照させていただきます。
私の質問は不足して申し訳ありません。

今現場の環境には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);
}
業務のコードですと外に出すのが問題になるかもしれないので,
リーダーさんに確認した方が良いかもしれません.

一応現時点では,

```php:a.php
<?php

require_once("./config.php");

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

```php:config.php
<?php

const cfg_y = 2;
```

こんな感じでも動いています.
ありがとうございます。🙇‍♂️🙇‍♂️ 勉強になりました。
上記のコードを参照して解決できました。
優しく説明いただき心から感謝しております。
よろしくお願いたします。
解決したなら良かったです!
View the remaining 5 comments.
Help us understand the problem. What is going on with this answer?
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login