Page 1
ぺちこん北海道
学生ランチセッション
PHP for Students
PHPカンファレンス北海道 実行委員会
USAMI Kenta
2024-01-13 PHPカンファレンス北海道2024
公開日:
by USAMI Kenta@tadsan
に札幌市中央区の札幌市民交流プラザで開催された『PHPカンファレンス北海道2024』で学生ランチセッション(30分)として発表しました。
2024-01-13 PHPカンファレンス北海道2024
お前誰よ
tadsan loves 北海道
tadsanとPHP
さてPHPは何ができる言語なのでしょうか
とにかく毀誉褒貶が激しい言語ランタイム
W3Techs 統計
パッケージ数
PHPはどこで使えるのか
PHPは汎用プログラミング言語
PHPは汎用プログラミング言語
PHPは汎用プログラミング言語
みなさんの想像するPHPとは
<!DOCTYPE html><html><head><title>Hello, PHP!</title></head><p><?php if (date('H') < 19): ?>こんにちは<?php else: ?>こんばんは<?php endif; ?></p><p>今は<?= htmlspecialchars(date('H')) ?>時です</p>
<?php require 'bootstrap.php';$db = mysqli_connect();$stmt = mysqli_prepare($db, 'SELECT * FROM books');mysqli_stmt_execute($stmt);print '<h1>本の一覧</h1>';print '<ul>';foreach ($stmt as $s) {print '<li>'; print $s->name; print '</li>';}print '</ul>';
<?php declare(strict_types=1);namespace Foo\Http\Controller;
class BooksController extends BaseController {public function index() {$books = Books::getAll();
$this->render(compact("books"));}}
“We have things like protected properties.We have abstract methods. We have all this stuff that your computer science teacher told you you should be using.I don't care about this crap at all.”
–Rasmus Lerdorf https://en.wikiquote.org/wiki/Rasmus_Lerdorf
“PHPにはprotectedプロパティも抽象メソッドもありますよ。計算機科学の教授が「使え」と言ってるものは全部。そんなことはクソ興味ないですけど”
–Rasmus Lerdorf (tadsanによる超訳)
変数に$があってPerlっぽくて
C言語っぽい関数と-> があって
雰囲気Javaっぽいオブジェクト指向で
<!DOCTYPE html><html><head><title>Hello, PHP!</title></head><p><?php if (date('H') < 19): ?>こんにちは<?php else: ?>こんばんは<?php endif; ?></p><p>今は<?= htmlspecialchars(date('H')) ?>時です</p>
use DBI;
$db = DBI->connect('...');$stmt = $db->prepare('SELECT * FROM books');$stmt->execute;print '<h1>本の一覧</h1>'; print '<ul>';for ($i = 0; $I < $sth->rows; $i++) {@row = $sth->fetchrow_array;print '<li>'; print $row[0]; print '</li>';}print '</ul>';
<?php require 'bootstrap.php';$db = mysqli_connect();$stmt = mysqli_prepare($db, 'SELECT * FROM books');mysqli_stmt_execute($stmt);print '<h1>本の一覧</h1>';print '<ul>';foreach ($stmt as $s) {print '<li>'; print $s->name; print '</li>';}print '</ul>';
<?php declare(strict_types=1);namespace Foo\Http\Controller;
class BooksController extends BaseController {public function index() {$books = Books::getAll();
$this->render(compact("books"));}}
PHPの歴史
PHPと文字列
PHPのオブジェクト指向機能
PHPのオブジェクト指向機能
<?php
<?php
class Book {public function __construct(public readonly string $name,) {}
...
class Book {/*** @var string* @readonly*/private $name;/** @param string $name */public function __construct($name) {$this->name = $name;
...
静的解析しやすい特徴
PHPの進化は型宣言の進化
いまやPHPは静的型付きと言っても過言ではない(本当か…?)
function add($a, $b) {return $a + $b;}
int + intって本当にintなの?
function add(int $a, int $b): int {return $a + $b;}
ひとつの解決策ではあるが… 不必要にfloatを強制するのか
function add(float $a, float $b): float {return $a + $b;}
あえて型宣言を省略する
/*** @param int|float $a* @param int|float $b* @return int|float*/function add($a, $b) {return $a + $b;}
function add(int|float $a, int|float $b): int|float {return $a + $b;}
よく使われていた頃は「重厚鈍重なIDEが必要な言語」のアンチテーゼとしてシンプルなスクリプト言語とエディタが好まれていた (ように思う)
ディタでは開発のオーバーヘッドが無視しがたくなってきた
を提供してくれるようになった
PHPと静的解析
型システムや変数スコープを正確に扱えるツールが開発され始めた
PHPStanとは
高速な解析を実現していた
PHPStanの提供する型
PHP処理系
受け付けてくれる
PHPの開発体制
(すべての状態が隔離され、リクエストごとに初期化される)
あるので、小規模からある程度大規模なアプリケーションにもフィットする
PHPはどこでも65点がとれる言語
の存在感は健在
PHP先生の雑草のような生命力にご期待ください!
