エンジニアのひよこ_level10

毎日更新してた人。たまに記事書きます。

【PHP】null合体演算子とエルビス演算子(三項演算子)の違い【163日目】

ちょっと間違えていたので

こちらの方で内容を変えて書いています。こちらもご参考に

www.nyamucoro.com

null合体演算子とは

null合体演算子(A ?? B)は、
Aが nullundefinedの時に、Bを出力し、
非nullの時にはAを出力するものです。

例がundefinedやnullの場合の処理を考える時に便利です。

// undefinedなので、''が出力される
echo $item ?? '';

// nullなので、''が出力される
$item = null;
echo $item ?? '';

// 非nullなので、10が出力される
$item = 10;
echo $item ?? '';

エルビス演算子(三項演算子)とは

エルビス演算子(?:)は、評価がtrueかによって分岐します。
三項演算子とも呼ばれます。

シンプルなif文を短く書いたり、見やすくするために使われたりしますが、
三項演算子を好まない人もいるので、チームメンバーと事前に使うかどうか決めておくとより良いです。

$item = 10;

// isset($item)がtrueなので、$itemが出力される
echo isset($item) ? $item : '';

// 上の式は下と一緒
if (isset($item)) {
    echo $item;
} else {
    echo '';
}

$item = 1;
// ?と:の間を省略すると、
// $itemが1なので、trueと同等であることから、$itemが出力されます。
echo $item ?: '';

// 上の式は下と一緒
if ($item) {
    echo $item;
} else {
    echo '';
}

それぞれの公式ドキュメント

null 合体演算子 (??)

この演算子は、もし第一オペランドが非 NULL の値であればそれを返し、 そうでない場合は第二オペランドを返します。

http://php.net/manual/ja/migration70.new-features.php

エルビス演算子三項演算子)(?:)

(expr1) ? (expr2) : (expr3) という式は、式1 が TRUE の場合に 式2 を、 式1 が FALSE の場合に 式3 を値とします。

式 expr1 ?: expr3 の結果は、expr1 が TRUE と同等の場合は expr1、 それ以外の場合は expr3 となります。

http://php.net/manual/ja/language.operators.comparison.php

【PHP】多態性(ポリモーフィズム)について勉強中【162日目】

元となる抽象クラス

<?php
abstract class baseClass
{
    abstract public function action();
}

継承先のクラス2つ

class ringoClass extends baseClass
{
    public function action() 
    {
        echo '私はりんごだよ';
    }
}
class orangeClass extends baseClass
{
    public function action() 
    {
        echo '私はオレンジだよ';
    }
}

動作させるコード

$r_class = new ringoClass;
$o_class = new orangeClass;

$r_class->action();
$o_class->action();

同じクラスを継承して、『同名のクラスを持つけど、別の動作してる』って話・・・?

Javaだと、$r_classと$o_classをbaseClass型で受け取るから、イメージがついた感じしたけど、
PHPで作ってみて、ポリモーフィズムがますますわからなくなった・・・

【PHP】??。undefinedに対してifを書くときにissetを使わない方法。【161日目】

undefindedの時に、空文字を出したい

if (isset($item)) {
    echo $item;
} else {
    echo '';
}

あるいは、三項演算子を使って

    echo (isset($item) ? $item : '')

これをnull 合体演算子 (??)を使って書く

null合体演算子

    echo ($item ?? '');

短い。見やすい。便利ね。

公式ドキュメント

PHP: 新機能 - Manual

定量的に評価出来ない能力はどう育てるのでしょう【160日目】

度々自分に足りないと感じる能力

今日とある方とランチをしていたのですが、

エンジニアを育成するときに、指定言語のプログラミングがある程度出来るようになったら良いのかって話がありました。

 

上手く検索する能力。

目標を達成するための過程作り

自己マネジメント等々。

 

私はこれらが足りてないし、今でもどう養うのかとたまに問いながら、先輩方のを見て学ぼうとしてます。

 

プログラミングスクールは?

エンジニア養成として、プログラミングスクールとかあるとは思います。

ただ、これらは最終的に企業に斡旋などをするときには、言語に対して一定の能力を持つという保証は出来るけど、

 

検索能力、設計能力の保証って可能なのかと。

 

定量化できない能力

これらの能力は、定量化できないのではないかと考えました。

すると、企業に売り出すのは難しい……

となると、検索能力を鍛えるカリキュラムを組むのも、必要なのかという点で難しい……

 

企業に売り出すのも難しければ、カリキュラムを組んで育てるのも、能力を持っているという保証も難しい。

 

必要な能力ではある。ただどう鍛えるか

自分に足りていない能力ではある。

そして必要な能力でもある。

ただ、どう鍛えるのかもなかなか見つからない。

 

こういった、定量化できない能力を鍛えることが出来るようになれば、

また上の段階のエンジニアになれるのではないかと思いました。

 

今日は悩んだ結果結論が出なかった話題でした。

 

【nginx】ドメイン毎にユーザーがアクセスできるディレクトリを制限する【159日目】

基本はrootディレクトリのお話

指定したrootディレクトリ配下のものだけがアクセス出来るのが基本なので、
ドメイン毎にrootディレクトリを指定してやればいい

server_name user-domain_name.jp;
root    "/var/www/public/assets_dir/user";
server_name admin-domain_name.jp;
root    "/var/www/public/assets_dir/admin";

rootをいじれば、ドメインごとに、アクセスするファイルを制限出来るのね。

これでpublicのuser配下であったり、admin配下のファイルにだけアクセス出来る。

同じ画像を使うときは?

ただ、top画像とか、同じ画像を扱う必要があるときに、両方のディレクトリにファイルを保存するのはナンセンス。

画像を変えるときに両方変更しなきゃいけない二重管理や、容量問題が出てくる。

なので、シンボリックリンクを使う。シンボリックリンクについては昨日の記事に。

ln -s ../common

willow710kut.hatenablog.com

シンボリックリンクとは。ショートカットとは違う【158日目】

シンボリックリンク

home/dir/

home/somedir/content.txt

 

で、home/dirにいる時にcontent.txtのシンボリックリンクを作成すると、元のファイルそのままに、

home/dir/content.txt

にファイルがあるように扱うことができる。

 

コマンド

cd home/dir

ln -s ../content.txt

 

ショートカットと違うの?

ショートカットは、home/dirで選択した時に、home/somedir/content.txtに飛ばされる。

ショートカット、移動をする感じ。

 

シンボリックリンクは、元ファイルを2つにコピーしてはいないが、さもそのパスにあるかのように扱うことができる。

 

何が嬉しいの

ファイルのアクセス権限や、複数の場所に配置したいときに、ファイルを増やして二重管理したり、容量圧迫しないなどの利点がある。

 

知ったばかりなので、補足や指摘ありましたらお願いいたします。 

Laravel+MySQLでtinyintの扱い【157日目】

desc table_nameでなにこれとなる

なぜ1だったり、4だったり指定されているのかと思って調べてみた。備忘録。

tinyintとは

1byteの数値。

符号なしなら、0から255、符号ありなら、-128から127まで。

tinyint(1)は

mysqlの時だけ、0or1を指します。つまり、booleanです。 

Laravelでマイグレーション書くときには

tinyint(1)は0or1、つまりboolean扱いになります、

$table->boolean('is_num');

tinyintの幅を指しているので、

$table->tinyInteger('numbers');

ちなみに、0から255は符号なしにするだけなので

$table->tinyInteger('numbers')->unsigned();

  になります。

体調戻るって素晴らしい。【156日目】

元気になりました。

無事に体調はほぼ復活。

鼻水はずるずるしてますが、吐き気はおさまって、ご飯も普通に食べれてます。

体調崩さないようにしよう。

会社の人に休め!って言われてるのに仕事した罰でした\(^o^)/

むしろ優しく声かけてくださってるにも関わらず、無視するの良くない……

休みたいのに休めない人もいますし、休めないときに休まなきゃいけないことにならないように、普段から体調には気をつけるべき。

みなさんも気をつけましょう……勉強時間が減ってしまった……