知行合一

とか言ってみる

【PHP】::の意味とか諸々

PHPをちゃんと触り始めて初日でわからないことなど...

基本的に公式リファレンスから引用してます。
PHP: Hypertext Preprocessor

◼︎基本

  • ""と''の違いは特殊文字を展開できるかどうか。"\n"は展開されるが'\n'はそのまま出る。変数は{}でくくると明示的に変数だよと表現できる。
  • $this->~~はクラス内から自クラスの変数やメソッドを呼ぶときに使う。

PHP: クラスの基礎 - Manual
staticのメソッド内で$thisは使えない。
参考
PHPで「self::」と「$this」の違いを理解する。


  • PHP 5.4以降から配列は
$colors = arrray("red" => "赤", "pink" => array("like" => "NO"));

みたいな感じでarray()でくくる(公式リファレンスもそうだった)が、

$colors = ["red" => "赤", "pink" => ["like" => "NO"]];

というように短くかけるようになったらしい


◼︎issetとvar_dump

isset — 変数がセットされていること、そして NULL でないことを検査する
var_dump — 変数に関する情報をダンプする

<?php
	$a = array('Math' => 100, 'Science' => NULL, 'Language' => array('English' => 'hello'));
	
	var_dump(isset($a['Math']));//true
	var_dump(isset($a['Science']));//false
	var_dump(isset($a['kokugo']));//false
	
	var_dump(array_key_exists('Language', $a));//true
	
	var_dump(isset($a['Language']['English']));//true
	var_dump(isset($a['Language']['Japanese']));//false
	
?>

◼︎スコープ定義演算子(::)

スコープ定義演算子 (またの名を Paamayim Nekudotayim)、 平たく言うと「ダブルコロン」は、トークンのひとつです。 static, 定数 およびオーバーライドされたクラスのプロパティやメソッドにアクセスすることができます。
これらの要素をクラス定義の外から参照する際には、 クラスの名前を使用してください。

PHP 5.3.0 以降では、変数を用いてクラスを参照することも可能です。 変数の値に (self や parent、 static といった) キーワードを指定することはできません。

定数とstatic変数は::でアクセスしろってことだと思う。
定数はconstで変数ならstaticで。


クラス定義の外からの::

<?php
class MyClass{
	const CONST_VALUE = '定数はドルつけずにconstで定義でだよ';
}


$classname = 'MyClass';//クラス名
echo $classname::CONST_VALUE;
?>

クラス定義の中からの::
内部クラスからのアクセスも::を使う。

<?php
class MyClass{
	const CONST_VALUE = '定数はドルつけずにconstで定義でだよ';
}

class OtherClass extends MyClass{
	public static $my_static = 'static var';//内部からアクセスされるやつ
	
	public static function doubleColon() {
		echo parent::CONST_VALUE . "\n";//親クラスのconstへアクセス
		echo self::$my_static . "\n";//内部クラスの変数へアクセス
		echo("doubleColon");
	}
}

$classname = 'OtherClass';
echo $classname::doubleColon();
//OtherClass::doubleColon();//上2行と同じ
?>

親クラスのメソッドをコールする

<?php
class MyClass{
	protected function myFunc() {
		echo "MyClass::myFunc()\n";		
	}
}


class OtherClass extends MyClass{
	public function myFunc() {
		parent::myFunc();
		echo 'OtherClass::myFunc()';	
	}
}


$class = new OtherClass();
$class->myFunc();
?>