PHPで詰まった部分

開発環境は、Windows 7 Professional(32bit) + PHP 7.1.7。


■定数を使う

<?php
define("TEISU", "定数です");
echo TEISU; # 定数です
?>


■trait(トレイト)を使う
RubyのモジュールをクラスにMixinするみたいなことが、PHPでもtrait(トレイト)を使うことでできます。あるクラスにトレイトを入れることで、そのクラスのオブジェクト経由でトレイト内の関数を呼び出すことができます。

<?php

trait m{
    function name(){
        echo "trait m -> name\n";
    }
}

class A{
    use m;
}

$a = new A();
$a->name();

?>

実行結果

trait m -> name

参考リンク
PHP: トレイト - Manual


再帰関数内で変数の値を保持する
変数の前にstaticをつけることで、静的変数となり、値を保持し続けることができます。変数aの値が10より大きい限り、自身を呼び出します。自身を呼び出しても、値が変数aは保持されています。もし、staticをつけなければ、毎回20の値が変数aに入り、無限ループしてしまいます。

<?php


function t(){
    static $a = 20;
    echo $a;
    if($a > 10){
        $a--;
        t();
    }
}

t();

?>

実行結果

20
19
18
17
16
15
14
13
12
11
10

参考リンク
PHP: static キーワード - Manual
PHPの静的変数 (static変数) の挙動まとめ


■文字列を数値に変換する
(int)で型キャストするか、intval($val)を使う。


■数値を文字列に変換する
(string)で型キャストするか、strval($val)を使う。

参考サイト
PHP-数値を文字列として表示する


■型をチェックする

<?php

class A{}

$var1 = "1023";
$var2 = 1023;
$var3 = 3.14;
$var4 = true;
$var5 = null;
$var6 = [];
$var7 = new A();

echo gettype($var1)."<br>";
echo gettype($var2)."<br>";
echo gettype($var3)."<br>";
echo gettype($var4)."<br>";
echo gettype($var5)."<br>";
echo gettype($var6)."<br>";
echo gettype($var7)."<br>";

?>

実行結果
f:id:k01ken:20180729010132p:plain

参考サイト
PHP: gettype - Manual


■複数行に渡って文字列を書く
・変数を書いておけば展開もできる

<?php

$str = "Hello World";

	$s = <<<"EOT" # この括弧の中の文字列は何でも良い。下の文字と一致させること。
		test
		test
		test
                $str
EOT; # この部分はスペースがあるとエラーになる。

	print $s;

?>

実行結果
f:id:k01ken:20180430150026p:plain


■四捨五入する
round
参考リンク
PHP: round - Manual


■日付⇔Unixタイムスタンプに変換する
strtotime - 日付をUnixタイムスタンプに変換
date - Unixタイムスタンプを日付に変換

<?php

$str = "2018-04-30 00:08:30";
echo strtotime($str);
$str2 = strtotime($str); # 1525039710
echo date("Y-m-d H:i:s", $str2); # 2018-04-30 00:08:30

?>

参考リンク
PHP: strtotime - Manual
PHPで日付関数を使いこなす(date, strtotime)


■オブジェクトかどうか調べる方法

<?php
class A{
}
$a = new A();
var_dump(is_object($a));
?>

実行結果

bool(true)

参考リンク
PHP: is_object - Manual


■訪問者のIPアドレスを取得する方法

<?php
$_SERVER["REMOTE_ADDR"];
?>

参考リンク
PHPでipアドレスを取得する方法