namespaceやuseを宣言しているクラスで、別ディレクトリにあるクラスをインスタンス化(new)する方法

namespaceやuseを宣言しているクラスで、別ディレクトリにあるクラスをrequire_onceで読み込み、従来の方法でインスタンス化しようとするとエラーになる。 普通にnewでインスタンス化しようとするとnamespaceで宣言しているディレクトリパスに存在するクラスを見にいくのが原因。
これを回避にするにはインスタンス化するクラスの先頭に「¥」(バックスペース)を付加する。

<?php
namespace App¥Http¥Controllers;
use Illuminate¥Http¥Request;

class NekoController extends Controller
{
	public function index(){
		require_once $_SERVER['DOCUMENT_ROOT'] . '¥other¥test¥Animal.php';
		// $animal = new Animal(); // × →従来の方法でインスタンス化しようとするとエラー →  'App¥Http¥Controllers¥Animal' not found
		$animal = new ¥Animal(); // 〇 → 「¥」(バックスペース)を付加するとエラーにならない。

名前空間namespaceとuseについて

namespaceは名前空間と呼ばれる。
名前の競合を気にしないようにするためのもの。
「氏名」に例えるなら「氏」に相当する。
原則としてnamespaceは1つのクラスに一つの宣言。一応複数のnamespaceを宣言可能。
namespaceを宣言したモジュールやクラスを使うときにはuseを使う必要がある。

ルートパスを取得する | localhostと本番環境の両方に対応

「$_SERVER['DOCUMENT_ROOT']」だけでもルートパスは取得可能。 しかし、ルートパスの末尾(セパレータ)は環境によって異なる。「/」や「\」であったり、もしくは何もついていない。
そのため、ルートパスの末尾がセパレータなら除去する処理を施している。

	// ルートパスを取得する
	$root = $_SERVER['DOCUMENT_ROOT'];
	$root_last_str =  mb_substr($root, -1);
	if($root_last_str == '/' || $root_last_str == '\\'){
		$root = mb_substr($root,0,mb_strlen($root)-1);
	}
	

property_exists | オブジェクトもしくはクラスにプロパティが存在するかどうかを調べる


$animal = new Animal();

echo property_exists($animal, 'name'); // → 1
echo property_exists($animal, 'age');//  → 1
echo property_exists($animal, 'power');//  → 1
echo property_exists($animal, 'bark');//  → 空
echo property_exists($animal, 'dummy');// → 空

class Animal{
	public $name = 'Cat';
	protected $age = 99;
	private $power = 99;
	
	public function bark(){
		
	}
}
	

オリジナルクラスでCake機能を使えるようにする | CakeObject

Cakeの機能を持ったオリジナルクラスを作成する場合、CakeObjectクラスを継承する方法がある。

公式ドキュメントより Class CakeObject


アノテーションコメント TODO FIXME HACK REVIEW OPTIMIZE CHANGED NOTE WARNING QUESTION TEMP

アノテーション説明
TODOあとでやります。
FIXME不具合があります。あとで修正してください。
HACK汚いソースコードなのでリファクタリングしてください。
XXX危険な個所です。原因不明ですが動いてはいます。
REVIEW見直しが必要かもしません。レビューが必要です。
OPTIMIZE最適化:無駄が多いので最適化がしてください。
CHANGED変更:コードを変更しました。
NOTE備考:長めの詳細情報を書きます。
WARNING注意してください。
QUESTION質問?
TEMP一時的

staticメソッド | ファクトリー | static() | self::


	
$neko = Neko::factory();

class Neko{
  public static function factory(){
    $name = self::getDefName();
    return new static($name);
  }

  public static function getDefName(){
    return 'タマ';
  }

  public function __construct($name){
    echo $name;
  }
}
	

falseかtrueのフラグ値に変換するテクニック | !!


<table class="tbl2"><tbody>
<?php 
$list = [1, 99, 0.1, 'あ', '赤犬', true, 0, '', null, false];
foreach($list as $val){
	$flg = !!$val; // falseかtrueに変換する
	if($flg === false) $flg = 'false';
	if($flg === true) $flg = 'true';
	echo "<tr><td>{$val}</td><td>{$flg}</td></tr>";
}
?>
</tbody></table>
	

出力

1true
99true
0.1true
true
赤犬true
1true
0false
false
false
false

初期値をセットする際の1行簡易記述 | ワンライナー | ??


	<?php 
	$data = ['neko'=>'猫'];
	$neko = $data['neko'] ?? '犬';
	$dog = $data['dog'] ?? '犬';
	echo $neko;
	echo $dog;
	?>
	

出力

猫犬
	

DockerコンテナにてGDを使えるようにする | PHP7.4

注意

あれこれコマンドを試したので確定した方法ではないが、 おおよそ以下のような流れでGDをインストール。

Dockerコンテナにアタッチ。
$winpty docker exec -it test_php_1 bash


test_php_1 bashコンテナの中に入ったらGD関連をインストール
	#apt-get update 
	&& apt-get install -y  libmagick++-dev \
		libfreetype6-dev \
		libjpeg62-turbo-dev \
		libpng12-dev
		libmagickwand-dev \
		libpq-dev \
		libwebp-dev \
		libxpm-dev
	 && docker-php-ext-configure gd \
	    --with-freetype \
	    --with-jpeg \
	    --with-webp \
	    --with-xpm \
	 && docker-php-ext-install -j$(nproc) gd
	

インストールが終わったらDockerコンテナを再起動。

「phpinfo()」でGDの項目が出てきたら成功。



localhostで接続が拒否されました。←対策 | https SSL | Chrome

Chromeで「https」対応の開発を行っていると、localhostでのアクセスが拒否されることがある。 この場合、以下の方法で対処できる。

Chromeブラウザを開き、「chrome://net-internals/#hsts」にアクセス。
「Delete domain security policies」の方にあるテキストボックスに"localhost"を入力してdeleteボタンを押下。

参考:いっしきまさひこBLOG