2021/9/20 Web開発勉強(JavaScript(canvas), PHP)
記録
JavaScriptの即時関数
- スコープの汚染を防ぐために使用をする。グローバルスコープと関数スコープのみで、即時関数を使うことで変数を上書きすることを減らす。
- 使い所
- ページの初期化
- 機能判定
- プライベートプロパティ / メソッドの定義
JavaScriptはプライベート変数の定義の機能がないらしい
- 他の言語のようにプライベート変数などの機能がないっぽい。導入する流れはあるみたい。
https://note.affi-sapo-sv.com/js-private-method.php
PHP関連
アルバイトでPHP使っているがちゃんと一応やっとこうと思って、メモ。考え方自体は、授業でやっているので理解しやすい感じ(Javaと似ている感じ)。
selfとthisの整理 結局自クラスかインスタンスかってだけ。 PHPの「self::」と「$this」の違いを現役エンジニアが解説【初心者向け】 | TechAcademyマガジン
親クラスと子クラスでオーバーライドするときの親クラスのプロパティのアクセス修飾子は
protected
を使う。オーバーライド禁止するにはメソッドに
final
キーワードをつける。
final public function show()
{
printf('%s' . PHP_EOL, $this->text);
}
- 抽象クラスで、メソッドの定義漏れを防げる。そのメソッドがないとエラーになる。
abstract class BasePost { protected $text; public function __construct($text) { $this->text = $text; } abstract public function show(); } class Post extends BasePost { public function show() { printf('%s' . PHP_EOL, $this->text); } }
- PHPは親クラスを一つしか持てないが、
インターフェースを用いて抽象メソッドを幾らかもてる
。継承関係がないクラスでもインターフェースは使える。
interface LikeInterface { public function like(); } class Post extends BasePost implements LikeInterface { private $likes = 0; public function like() { $this->likes++; } public function show() { printf('%s (%d)' . PHP_EOL, $this->text, $this->likes); } }
- trait -> useでコードの断片をまとめることができる。
trait LikeTrait { private $likes = 0; public function like() { $this->likes++; } } class Post extends BasePost implements LikeInterface { // 上のをuseで呼び出せてコードが綺麗になる。 use LikeTrait; public function show() { printf('%s (%d)' . PHP_EOL, $this->text, $this->likes); } }
- require()はエラーで処理が止まって、include()は処理が止まらない。
- require_once()で一度だけ読み込む。
- spl_autoload_registerを使うとクラスのファイルが読み込まれていない時に、自動で読み込みをしてくれる。クラスのファイルが必要。
// 先頭につける。 spl_autoload_register(function ($class){ require($class . '.php'); });
- 名前空間は、同じクラスを定義してしまうのを防ぐ。
// Post.phpの先頭につける namespace PHP\MyPHPApp; // 呼び出し側の先頭 use PHP\MyPHPApp as MyPHPApp; // または use PHP\MyPHPApp; // 呼び出し方 $posts[0] = new MyPHPApp\Post('hello');
- 例外処理 エラーの処理を起こすところを以下のように記述。
throw new Exception('Text too short!');
try-catchの構文でエラー処理を書く。
try { $posts[0] = new Post('!'); $posts[1] = new Post('hello again'); foreach ($posts as $post) { $post->show(); } } catch (Exception $e) { echo $e->getMessage() . PHP_EOL; }