/// BANGBOO BLOG ///

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

January 1, 2016

PHP Developer

■スクラム
https://www.bangboo.com/cms/blog/page_321.html
https://www.ryuzee.com/contents/blog/7137
プロダクトオーナー・??バックログ並び・??
スクラムマスター・??外部からチームを守る)
デイリースクラム(豈?朝)
プロダクトバックログをスプリントバックログ縺?
ベロシティ・??工数・??
レビューをしてリリース可能な状態に・??実際のリリースはビジネス判断・??
スプリントレビュー・??デモ・??
スプリントレトロスペクティブ(チーム改善)

■PHP開逋?
http://www.objective-php.net/
オブジェクト指向(クラス、メソッド、プロパティ・??、MVCについ縺?
 まずプログラムが動縺?ようにしてから必要ならクラス化やMVCにすればよい、大臀??は臀??要だが
  fatコントローラならページ化した方がいいのだが
  MVCのモデ繝?Mをロジックとデータ縺?2段觸??成→ファイル藹??え逆に臀??元管理ができないしょ
   利点・??オブジェクト指向は臀??言語への藹??用力鍛錬、MVC縺?Vの役割分担、藹??入障壁
    Cを無縺?しVが繝?ンドルする、Page-Objectモデルが、レスポンスも早縺?、込み入った処理/デザインも出来てよいけ縺?
       靴軆??やら枠嵌よりHTMLやら言語やらはネイティブがいい
 SPA(Single Page Application)縺?JSがサーバに欲しいデータを要求する、MVCがダメだからPOモデ繝?

■オブジェクト指向のルー繝?
カブセル化:隠蔽するべ縺?できるだけpublicメンバを使繧?ない
継承・??親クラスのプロパティやメソッドが引き継がれる(private以藹??縺?)、ルールが多縺?ありOOにできる
ポリモーフィズム(多態諤?):オーバライドやオーバロードでメソッドを状觸??で使分ける
//// アクセス修飾藹??
 public オブジェクト外からアクセス藹??
 private オブジェクト外からアクセス臀??可、継承されない
 protected オブジェクト外からアクセス臀??可、継承される
//// コンストラク繧?
 __construct()はインスタンスの生成時に臀??度だけ自動的に藹??行される
 アクセス修飾藹??は基本的に縺?public
//// オーバーライド
 継承クラスで親クラスのメソッドを上書きし乗っ藹??る
//// 静的メンバ
 static修飾子をつける
 インスタンスを生成しな縺?てもアクセス可能・??publicにしてお縺?と・??
 「クラス名::メソッド名()」で呼び出す
 staticメソッドはインスタンスから呼び出せない(クラス自臀??に藹??する)
  クラスのメソッドでな縺?関謨?のような役蜑?
//// クラス藹??謨?
 const 定数名 = 蛟?
 アクセス修飾藹??は臀??けられません(クラス藹??数縺?public扱い)
 定数名には「$」は臀??けません、define関数と同じ
 設藹??値の格軆??用として普通使う、クラスで軆??め分類してお縺?縺?define関数より管理がし易い
 静的フィールドとの違いは値の藹??更が出来るか出来ないかだけ
//// 抽象クラ繧?
 abstractをつける
 直接インスタンスを生成できず必ず継承して使用するクラ繧?
 継承先のクラスで藹??ずオーバーライドする必要がある
 抽象メソッドとは処理内容を持たずに名前だけ定義されたメソッド
  共通で鐔??う処理を抽象クラスとして藹??義し各画面の処理は抽象メソッドとしておく使い譁?
//// インターフェイ繧?
 インターフェイスとは抽象メソッドのみ藹??義可能なクラ繧?
 抽象メソッドだがabstractはいらない
 アクセス修飾藹??に縺?publicしか指定できない
 直接インスタンスの生成はできない
 実装にはインターフェイスで藹??義されているメソッドは全て藹??装する必要があり、アクセス修飾藹??縺?publicで藹??数の数も名前も完全臀??致が必要
  インターフェイスの藹??装でポリモーフィズムであることを保障できる
  インターフェイスは藹??重実装藹??
   class FoodProduct implements IProduct, IFood
//// タイプヒンティン繧?
 引数で藹??藹??るクラスやインターフェイスを制限できる
  public function addProduct(Meet $product) ←Meetクラスを指定
  public function addProduct(IProduct $product) ←Iproductインターフェイスを指定
//// 名前空間
 異なる名前空間同士では同じ名前のクラスが定義できるようになる(長名になりがちなので・??
 名前空間未指定はグローバル空間、\をつけるとグローバル throw new \Excetpion('hogehoge');
 クラス藹??義ファイルの頭縺?namespaceキーワードで名前空間を定義 namespace Food;
 使用縺?2つの方觸??
 1)namespaceを含めたフルパスでクラス名を指定し使用 $item = new \Food\Product();
 2)前空間の利用宣言をあらかじめする use Food\Product; $item = new Product();
  同名だと鐔??突するので別名や髫?層化やオートローダ http://www.objective-php.net/basic/namespace
 namespace はディレクトリではな縺?別名であり、
  接頭文でもな縺?、関数名が被らないように名付時と使用時の両方で宣言してるだけ
  関数名被らなければ使用時に觸??にしす縺?る必要はない、下記縺?OK
   namespace App\Http\Controllers;
   use Illuminate\Http\Request;
   use App\Http\Requests;(App\Http\Controllers\App\Http\Requestsという繧?けではない)
//// 例外
PHPは勝手に臀??外を投げないので自分で書縺?のであまり諢?味がない(新しい関数やクラスは臀??外を投げて縺?れるが)
try {
    if($a!==1){ throw new Exception('Bad'); }
    echo "End";
} catch (Exception $e) {
    Logger::write($e->getMessage());
    echo "ERror";
}
-> ERror

//// サンプ繝?
<?php
//カプセル化、アクセス修飾藹??、コンストラクタ、セッタ繝?/ゲッターのメソッド、継謇?
class Product{
    protected $name; // 商品名
    protected $price; // 価譬?
    public function __construct($name){
        $this->name = $name;
    }
    public function getPrice(){
        return $this->price;
    }   
    public function setPrice($price){
        $this->price = $price;
    }
}
class FoodProduct extends Product{
    private $expire;
    public function setExpire($expire){
        $this->expire = $expire;
    }
    public function getExpire(){
        return $this->expire;
    }
}
$food = new FoodProduct('肉');
$food->setPrice(100);
$food->setExpire(30);
echo '価格を' . $food->getPrice() . '円に設定しました。';
echo '賞味期限を' . $food->getExpire() . '日に設定しました。';
?>
<?php
//静的メンバ(静的メソッド)
class PriceFormater{
    private static $fee = 10;
    public static function formatJapanese($price){
        $price = number_format($price + self::$fee);
        $price = $price . '円';
        return $price;
    }
}
$price = PriceFormatter::formatJapanese(3000);
?>
<?php
//クラス藹??謨?
class Tax{
    const IMPORT_TAX_RATE = 0.08;
}
class Product{
    const TAX_RATE = 0.05;
    private $price = 100;
    public function getSalePrice(){
        $tax = $this->price * self::TAX_RATE;
        $tax2 = $this->price * Tax::IMPORT_TAX_RATE;
        $price = $this->price + $tax + $tax2;
        return $price;
    }
}
var_dump(Product::TAX_RATE);
$prd = new Product();
$price = $prd->getSalePrice();
?>
<?php
//抽象クラス・??文字追加の処理所要時間測藹??)
abstract class TimeMeasurer{
    abstract protected function process();
    public function exec(){
        $startTime = $this->getMicrotime();
        $this->process();
        $endTime = $this->getMicrotime();
        $procSecs = $endTime - $startTime;
        echo sprintf('処理所要時間縺?%s秒でした。', $procSecs);
    }
    private function getMicrotime(){
        $splitedMt = explode(' ', microtime());
        return $splitedMt[0] + $splitedMt[1];
    }
}
class TestClass extends TimeMeasurer{
    protected function process() {
        for ($i = 0; $i < 1000000; $i++) {
            $str .= 1;
        }
    }
}
$test1 = new TestClass();
$test1->exec();
?>
//インターフェイス、タイプヒンティング、(ポリモーフィズム)
---- Car.php
interface Car{
    public function start();
}
GasolineCar.php
class GasolineCar implements Car{
    public function start(){
        echo sprintf('%s エンジ繝?OK', $this->gasolineIgnition());
    }
    //関数の戻り値の型をstringで指定
    private function gasolineIgnition(): string
    {
        return 'brrr';
    }
}
---- DieselCar.php
class DieselCar implements Car{
    public function start(){
        echo sprintf('%s エンジ繝?OK', $this->DieselIgnition());
    }
    private function DieselIgnition(): string
    {
        return 'vvvv';
    }
}
---- driver.php
class driver{
    public function on(Car $car){
        $car->start();
    }
}
index.php
$driver = new driver();
$driver->on(new GasolineCar());
$driver->on(new DieselCar());

//// OO設鐔??
index.php
 Dispacherを呼縺?

abstract class Dispatcher
 URL引数を藹??得
class siteDispatcher extends Dispatcher
 URL引数から適切なコントローラを呼縺?

↓abstract class RequestVariables
↓ $_POST、$_GETを藹??得
↓class Post extends RequestVariables
↓ Post変謨?
↓class QueryString extends RequestVariables
↓ Get変謨?
↓class Request
↓ Post変数縺?Get変数を郤?める

↓class ModelBase
↓ モデルの共通機能・??DB接続等)をstaticメソッド、継承してもいい

class CartController extends ControllerBase
 カート用コントローラ・??ヘッダーやコンテント)
abstract class ControllerBase
 カート以藹??でも使用する共通機能・??Post/Get藹??得やビュー呼出・??

class CartHeader
 ユーザ情報軆??のカートのヘッダー情報のモデ繝?
class CartContent
 リスト藹??得や追加や削除の操作のモデ繝?

====
//// オブジェクト指向のメ繝?
 コントローラのメソッド内では藹??数にスコープをつけな縺?て良い
  メソッド外に縺?public/private/protectedを付ける
 インスタンス生成 $a = new Class名; コンストラクタに渡す場合縺? new Class名(引謨?);
  メソッド使逕? $a->メソッド();

-> (クラスのフィールド名、メソッド名) アロー觸??算子 メンバ変数やメンバ関数を使う
:: (クラスのメソッド名) スコープ演算子 インスタンスを生成していないクラスのメンバ関数を使う事が出来る

    class Pet{
        var $dog = "wan";
        var $cat = "nyan";
        function func(){
            echo "Welcome";
        }
    }
    echo Pet::cat;
    $obj = new Pet();
    echo $obj->func();

phpにおける :: 縺? ->に違いについ縺?
アロ繝?(->)演算子を使う場合 インスタンスプロパティとインスタントメソッドにアクセスする echo $a->name
スコープ定鄒?(::)演算子を使う場合  静的プロパティと静的メソッドにアクセスする
https://qiita.com/mpyw/items/41230bec5c02142ae691

インスタンスプロパテ繧?インスタンスメソッド静的プロパテ繧?静的メソッド
外部から$v->name$v->name()クラス名::$nameクラス名::name()
インスタンスメソッド内から$this->name$this->name()self::$nameself::name()
静的メソッド内から辟?辟?self::$nameself::name()

クラス名に藹??数が使えるので注諢? $con = new AAA(); は臀??と同じ
 $className = 'AAA';
 $con = new $className();

$_SERVER['REQUEST_URI']等はグローバル藹??数なのでどこへでも書ける(クラスやメソッド内等)

====

可藹??変謨?
$test = "aaa";
$var  = "test";
echo $$var;     //"aaa"が出力
echo ${"test"};  //これも"aaa"が出力
echo ${$var};  //これでも"aaa"が出力
${"name_$test"}
$this->{$test}
$foo->{$start . $end}
$foo->{$arr[1]}

三項演算子
 条件蠑? ? 真の藹?? : 偽の藹??
 $lang = 'En';
 $msg = $lang == 'Jp' ? 'こんにち縺?' : 'Hello';
 print $msg;//Hello

エルビス觸??算子
 条件蠑?(真の藹??) ?: 偽の藹??;
 条件蠑?がTUREと同等だった場合その値または「1」が返され、FALSEだった場合に偽の藹??が返されます
 $a = 4;
 $b = 9;
 $num = $a < $b ?: 'a縺?bより大きい蛟?';
 echo $num;//1

NULL合体演算子
 条件蠑?また縺?$変謨? ?? 蠑?;
 条件蠑?また縺?$変数の値が「NULL」のとき蠑?が返り、FALSEのときは条件蠑?また縺?$変数の値が返えされます
 条件が存在しな縺?てもnoticeエラーが出ない
 $list = ['a' => 1, 'b' => 2, 'c' => 3];
 echo $list['b'] ?? '99'; // 2
 echo $list['z'] ?? '99'; // 99
https://www.tomcky.net/entry/2018/02/17/093654
https://qiita.com/ritsuka/items/b4f78ac4121ce5e01173

連想配列縺?foreach
 $preflist = array('Tokyo' => '東京', 'Osaka' => '大髦?');
 foreach ($preflist as $key => $value){
   echo $key . ':' . $value;
 }
 $fruits = array("Orange","Apple","Berry");
 for($i = 0 ; $i < count($fruits); $i++){
  echo $fruits[$i];
 }

配列を指定した値で埋める
 array_fill (インデック繧?, 要素謨?, "蛟?");
 $ar = array_fill (4, 3, "PHP");
 Array ( [4] => PHP [5] => PHP [6] => PHP )

配列の中で最も大きい数値を返します
 max( array(100, 200, 300) )
 min( 100, 200, 300 )

変数の整数としての値を藹??得する integer
 intval('122.34343The') = 122

平方根・??べき乗を藹??得するには、sqrt()、pow()関謨?
 pow(8, 2) = 64
 sqrt( 16 ) = 4

NULLか変数ありか空か
 (is_null($val01) ? 'TRUE' : 'FALSE')
 (isset($val01) ? 'TRUE' : 'FALSE')
 (empty($val01) ? 'TRUE' : 'FALSE')

値の出現回数の軆??ざらい
 $array = array(1, "hello", 1, "world", "hello");
 print_r(array_count_values($array));
  [1] => 2, [hello] => 2, [world] => 1

asort($A)値で昇順にキー臀??持しソート、連想配列向き arsot($A, SORT_STRING)降順にソート,文字のモード
sort() / rsort() ソート後にキーが添藹??配列が付け直される

文字列を配列に藹??觸??する
 str_split('hel')
  [0] => H
  [1] => e
  [2] => l

配列に追加
 $hoge['key2'] = 'value2';
 $hoge[] = 'AAA';
 array_push($hoge,'CCC','DDD');

array から要素を削除、ループ中縺?count()現象に注諢?
 unset($arr[1]);
 $arr = array_values($arr);//添藹??が0から振られ直す

breakはデフォルトでは臀??番内側縺?while文を抜けて次の処理へ移る
 ネストの場合は抜けたい髫?層の数を指定 break 2;
 現在のループ処理を抜けて、次のループ continue;

配列のキー・添字を確鐔??
 $ar = array("PHP" => 4, "CGI" => 5);
 if(array_key_exists("PHP", $ar)){

配列の値の有無をチェッ繧?
 $ar = array("PHP", "CGI", "PERL");
 if(in_array("PHP", $ar)){

シリアライ繧?
ソフトウェア内部で扱っているデータを丸ごと、ファイルで臀??存したりネットワークで送藹??信することができるようにバイトストリームに藹??觸??する、これにより配列やオブジェクト等ををデータベースやテキストとして臀??存したりすることができる、シリアライズ藹??の文字列は「型:値」の形蠑?に藹??觸??されている(string:byte謨?)
$data=array('key1' => 'value1','key2' => 'value2');
$serial=serialize($data);
var_dump($serial);//string(54) “a:2:{s:4:”key1窶?;s:6:”value1窶?;s:4:”key2窶?;s:6:”value2窶?;}”
//戻す $data=unserialize($serial);

■ファイルアップロード(のエラー判藹??)がダメ縺?php.ini
memory_limit (メモリ使用驥?の臀??限)128MB
post_max_size (POSTの最大サイズ 窶?1回の蜈?upファイルの合計サイズ・??8MB->16M
upload_max_filesize  (1ファイルあたりの最大アップロードサイズ・??2MB->8MB
  memory_limit >= post_max_size >= upload_max_filesize > MAX_FILE_SIZE で設定する必要がある
max_execution_time スクリプトの藹??行時間 30
file_uploads ファイルアップロードが許可されているか On
max_file_uploads 一度にアップロードできるファイル謨? 20
apacheに「LimitRequestBody」がありデフ繧?2GB い縺?らPHP側でそれ以臀??を設藹??をした所縺?HTTPリクエストで饅??逶?(FTPが必要?)
<?php phpinfo(); ?>で確認
php.iniを変更する(通常これ)
htaccessで設定する
httpd.confで設定する
1)<input type="hidden" name="MAX_FILE_SIZE" value="8000000">のタグを埋め繝?ンドリン繧?
 超える縺?$_FILES['userfile']['error']縺?0以藹??の確か2が返る
2)アプリ側でも閾値を持縺?$_FILES['userfile']['size']でエラー繝?ンドリング、蟆?さめに設定
 しかしファイルが大きす縺?る縺?PHPではファイルサイズが0になり不譏?になるが
 $_SERVER['CONTENT_LENGTH']縺?Postサイズは藹??れる→(2)縺?
3)upload_max_filesizeを超える縺?$_SERVER['CONTENT_LENGTH']でエラー繝?ンドリン繧?
 これなら(1)のアプリ制限を持たす必要もないが動的に制限を觸??けたい場合縺?
4)post_max_sizeを超えるとアプリが落ちるので大き目に設定
 ※臀??記の考え方は藹??考になるがコードは間違っている
 upload_max_filesize post_max_sizeエラーの対策 CakePHP - watuu's diary (hatenablog.com)
 php — PHP縺? `post_max_size`を超えるファイルを適切に処理する方觸??は・?? (it-swarm-ja.tech)

■Javascript
関数宣言>無名関数・??ES6 クラス で書き方の藹??驕?
コツ、使用、注意事項をまとめてある
https://www.bangboo.com/cms/blog/page_325.html

■CSSレイアウト
https://www.bangboo.com/cms/blog/page_327.html
Grid 格藹??状のレイアウト(テーブルレイアウトな感じで・??
flexbox 1行の横並び、縦並縺?
float テキストの回りこ縺?
https://speakerdeck.com/tonkotsuboy_com/2019nian-madenijian-zhi-siteokitai-cssjavascriptfalseshou-fa
https://qiita.com/kura07/items/e633b35e33e43240d363
https://idotdesign.net/blog/web/htmlcss/css-grid-layout/
http://www.htmq.com/css3/

■CSS
Lightboxなしモーダル https://unicolabo.jp/topics/668.html#overlay
 https://www.bangboo.com/reserve/index.php
Formのフォーカスやツールチップ https://www.go-next.co.jp/blog/web/html_css/23603/
Table Trオンマウス https://gray-code.com/html_css/change-style-when-cursor-is-on-table-line-or-cell/

■HTMLタ繧?
https://qiita.com/kudo_kk/items/b2b1341b2b2543b6fa58
alt属性は画蜒?の代替テキスト
title属性はふきだしチップを表示

/// HTML5
https://www.bangboo.com/cms/blog/page_273.html

■Laravel ララベ繝?
https://coinbaby8.com/laravel-php-dekirukoto.html
https://laravel10.wordpress.com/
ルーティング・??  URLと対応 .phpで軆??繧?せず処理をひとつのファイルやクラスにまとめる
Blade:  テンプレートエンジ繝?
ミドルウェア・?? URL前後に処理を付加
エラー繝?ンドラ・?? 例外やエラーが発生した際の処理
DI : サービスコンテナというのを用いクラスインスタンスの臀??存度を極力下げて、実行時に藹??部から荳?えてもらえるよう縺?
バリデーション・??  入力値のチェックを設藹??のみで自動的縺?
データベース連謳?
認証の自動化

インスコ・??機能・??使い譁?
https://www.bangboo.com/cms/blog/page_324.html

■IDE/Editor
VS code, Atom, PhpStorm, etc.
HTMLエディ繧?: Dreamweaver, Brackets etc.
 https://hota1024.com/2018/02/19/php%E3%81%AE%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF5%E9%81%B8/
Visual studio code縺?PHP intelephense、PHP Debugを入れる?

DW8の拡張子設藹??: 
C:\Program Files (x86)\Macromedia\Dreamweaver 8\Configuration\DocumentTypes\MMDocumentTypes.xml
https://helpx.adobe.com/jp/dreamweaver/kb/change-add-recognized-file-extensions.html

■Git
https://www.bangboo.com/cms/blog/page_322.html

■XSS対軆??、CSRF対軆??、脆弱性チェッ繧?
https://www.bangboo.com/cms/blog/page_267.html

PHPサイバーテロの技法


■SQL
https://www.bangboo.com/cms/blog/page_151.html
https://www.bangboo.com/cms/blog/page_154.html

■Memcached
KVSでメモリにキャッシュを持たせる
1)Memcached 縺?get
2)キャッシュがない or Memcachedサーバが落ちている場合、DBから藹??得
3)2の軆??果をMemcached 縺?set
http://dbinfo.sakura.ne.jp/?contents_id=219

■画蜒?アクセス縺?PW保隴?
ディレクトリ縺?Basic認險?PW保護 ログイン時縺?htpasswdを時間制限で書き觸??える https://teratail.com/questions/121911
<img src="https://user:password@example.com/secret.jpg"> 画蜒?URL縺?PW埋込がFirefoxしかできな縺?なってた(2019蟷?8月時点・??
Apache縺?Cookieによるアクセス制御をかける http://webos-goodies.jp/archives/50573319.html
Blob縺?PHPでセッション鐔??証を判藹??後に出力(ヘッダーで画蜒?として・??
 ファイル名を変名してサーバに置縺?、アクセス時に藹??名をし縺?DL(画蜒?じゃないが)

■要件藹??義、上流工軆??、PMBOK
https://www.bangboo.com/cms/blog/page_171.html

======================
■今昔
■MySQL
type=でな縺? ENGINE=InnoDB 縺?
0000-00-00はだめ datetime NOT NULL default '1000-01-01 00:00:00',

■画蜒?にアクセス制御を加えアクセスできな縺?する
1)htaccess縺?Basic認証 https://www.kens-web.com/2011/06/1235
2)PHPでセッションを使いDB縺?Blob http://web-design-fox.hatenablog.com/entry/2015/06/23/000412
上記2つがメインか?Basic認証縺?PWの管理方觸??で工夫はできそう(アクセス軆??止フォルダやログイ繝?PW共用軆??で・??

twitter
Hatena
Google Buzz
newsing
Yahoo!
Buzzurl
Technorati
del.icio.us
Choix
Iza!
Livedoor Clip
Facebook
Evernote
 

Posted by funa : 10:47 PM | Web | Comment (0) | Trackback (0)