HighBridge’s blog

勉強の記録

2021/9/20 Web開発勉強(JavaScript(canvas), PHP)

記録

  • jsのcanvasの講座(ドットインストール)
  • ローディングアイコンの作成
  • PHP文法整理

JavaScriptの即時関数

  • スコープの汚染を防ぐために使用をする。グローバルスコープと関数スコープのみで、即時関数を使うことで変数を上書きすることを減らす。
  • 使い所
    • ページの初期化
    • 機能判定
    • プライベートプロパティ / メソッドの定義

qiita.com

JavaScriptはプライベート変数の定義の機能がないらしい

  • 他の言語のようにプライベート変数などの機能がないっぽい。導入する流れはあるみたい。

https://note.affi-sapo-sv.com/js-private-method.php

PHP関連

アルバイトでPHP使っているがちゃんと一応やっとこうと思って、メモ。考え方自体は、授業でやっているので理解しやすい感じ(Javaと似ている感じ)。

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;
}