[PHP]文字列の内容に応じて自動で色分けする

ユーザー名などの任意の文字列に対して文字色を自動で指定するサンプルを作りました。
同じ文字列に対しては常に同じ色が返ります。色の選択肢はあらかじめ用意し、その中から色が選ばれます。
色の選択肢が少ないと文字が異なっても同じ色が重複することになります。

<?php
$colors = ['#ee0000', '#3a9b00', '#006ecc', '#ff9000', '#000000'];

function stringToColor($str, $colors){
    $index = hexdec( substr(md5($str), 0, 15) ) % count($colors);
    return $colors[$index];
}
?>
<span style="color: <?php echo stringToColor('hello', $colors);?>">hello</span>

[PHP]次の土日(今週末)の日時を取得する

PHP で日付を扱う場合は基本的に DateTime クラスを使いますが、add() などを使って日時を操作するとオブジェクト自身が書き換えられてしまうため計算結果だけが欲しいという場合には向きません。
そのような場合 DateTimeImmutable クラスを使うと add() した場合新しい DateTimeImmutable オブジェクトを返すのでもともとのオブジェクトの日時を書き換えることなく日時計算の結果だけを取得できます。

<?php
$now = new DateTimeImmutable();    // 今日
$w = (int)$now->format('w');
$diff = 6 - $w;

$sat = $now->add(new DateInterval('P' . $diff . 'D'));
$sun = $now->add(new DateInterval('P' . ($diff + 1)  . 'D'));

echo $sat->format('Y-m-d');    // 土曜日
echo $sun->format('Y-m-d');    // 日曜日

ちなみに今日の日付などが DateTime オブジェクトの形で与えられている場合、次のようにして変換することも出来ます。

$date = new DateTime();
$mutable = DateTimeImmutable::createFromMutable( $date );

[PHP]クラスのプライベートなプロパティやメソッドに外部からアクセスする

通常 private や protected に指定されているクラスのプロパティやメソッドを読み書きしたり実行したりすることは出来ません。
しかしテストの際などに一時的にその制限を無視してアクセスしたい場合もあります。そういったときは ReflectionClass を使うことで実現できます。

<?php
class MyClass
{
    private $foo = "";

    private function bar($str){
        return $str . "!";
    }
}

$myClass = new MyClass();

$refrection = new ReflectionClass(get_class($myClass));

// プロパティの読み書き
$foo = $refrection->getProperty('foo');
$foo->setAccessible(true);
$foo->setValue($myClass, "Hello"); // 書き込み
echo $foo->getValue($myClass); // 読み取り

// メソッドの実行
$bar = $refrection->getMethod('bar');
$bar->setAccessible(true);
echo $bar->invoke($myClass, "World");

プロパティに対しては getProperty()、メソッドに対しては getMethod() を使い、setAccessible(true) でアクセスできるようにします。

基本的には private や protected に指定されているということは外部からアクセスされたくない、書き換えられると破損するおそれがあるということですので、このようなリフレクションを使う際は内容を十分に把握し、本当に必要なときだけ利用するようにして下さい。

公式マニュアル:
PHP: リフレクション