MySQLとPostgreSQLのコメントの書き方のちがい

 

どーも、最近ベランダでビール飲むのにはまってます。

すずしくて気持ちええです。

 

普段PostgreSQLを使うことが多かったのですが、

MySQLを久々触る機会があったので、ある違和感感じました!

コメントの書き方が違う!!!

 

例えばこんなテーブルがあるとします。(PostgreSQLにて)

test_db=#SELECT *FROM test_table;
id | title | body
----+--------+----------------
1 | top | トップですよ。
2 | detail | 詳細ですよ。

 

「–」をつかったコメントを入りのSELECT文。よく使ってるやつ。

PostgreSQLでは問題なく使える。コメントって認識してくれてる。うん。

test_db=# SELECT
test_db-# id,
test_db-# --nameはいらない
test_db-# body
test_db-# FROM
test_db-# test_table;
id | body
----+----------------
1 | トップですよ。
2 | 詳細ですよ。
(2 rows)

 

 

\しかし/

MySQLだとお。。。

mysql> SELECT * FROM test_table;
+----+--------+-----------------------+
| id | title | body |
+----+--------+-----------------------+
| 1 | top | トップですよ。 |
| 2 | detail | 詳細ですよ。 |
+----+--------+-----------------------+

 

 

「–」をつかったコメントを入りのSELECT文。MySQLでは怒られる。

「–」以下をカラムと認識してる。コメントって認識してないみたい。

mysql> SELECT
-> id,
-> --nameはいらない
-> body
-> FROM
-> test_table
-> ;
ERROR 1054 (42S22): Unknown column 'nameはいらない' in 'field list'

 

 

調べてみたら、MySQLの場合、「–」の後に半角スペースがいるみたい。

参考:https://dev.mysql.com/doc/refman/5.6/ja/comments.html

まじだった・・・。半角スペースいれたらできたし!

mysql> SELECT
-> id,
-> -- nameはいらない
-> body
-> FROM
-> test_table
-> ;
+----+-----------------------+
| id | body |
+----+-----------------------+
| 1 | トップですよ。 |
| 2 | 詳細ですよ。 |
+----+-----------------------+
2 rows in set (0.00 sec)

 

 

他にも….

●「#」をつかったコメントを入りのSELECT文。お!コメントって認識したみたい。

※「#」の後に、半角スペースはない。

mysql> SELECT
-> id,
-> #nameはいらない
-> body
-> FROM
-> test_table
-> ;
+----+-----------------------+
| id | body |
+----+-----------------------+
| 1 | トップですよ。 |
| 2 | 詳細ですよ。 |
+----+-----------------------+
2 rows in set (0.00 sec)

 

●「/*」「*/」をつかったコメントを入りのSELECT文。

※「/*」の後に、半角スペースはない。

※ 改行しても「/*」「*/」内はコメントとして認識

mysql> SELECT
-> id,
-> /*
/*> nameはいらない
/*> */
-> body
-> FROM
-> test_table
-> ;
+----+-----------------------+
| id | body |
+----+-----------------------+
| 1 | トップですよ。 |
| 2 | 詳細ですよ。 |
+----+-----------------------+
2 rows in set (0.00 sec)

 

 

\ちなみに!/

PosgreSQLでも「/*」「*/」は使えたーーーーーーーーあ。

全くしらんかった….

test_db=# SELECT
test_db-# id,
test_db-# /*
test_db*# nameはいらない
test_db*# */
test_db-# body
test_db-# FROM
test_db-# test_table
test_db-# ;
id | body
----+----------------
1 | トップですよ。
2 | 詳細ですよ。
(2 rows)

 

 

まあ、けど、PosgreSQLで「#」は使えないみたいです。

test_db=# SELECT
test_db-# id,
test_db-# #nameはいらない
test_db-# body
test_db-# FROM
test_db-# test_table
test_db-# ;
ERROR: column "nameはいらない" does not exist
LINE 3: #nameはいらない

 

 

PostgreSQLとMySQLってなんだかんだ、似てるからだいたい同じやろって

思ってたけど、改めて違いを認識。

コマンドでもデータベース切り替えの書き方違ったりで、なかなか勉強になりました。

 

PHPerKaigiいってきました!

PHPerKaigi@ココネリに参加してきました。
練馬初上陸でした。池袋から一駅でアクセス良きでした。

\公式サイトはこちら/
https://phperkaigi.jp/2018/

3/9,10と開催されてたのですが、3/10のみ参加しました。
お昼ご飯マグロどーん!他にもサンドイッチ、焼肉弁当もありました。
エンディングと懇親会のビールの豪華さが、、、もう最高!
昼食のマグロ丼コーヒー 懇親会のビール

スポンサー様にとっても感謝です。
写真のセンスがないのは、ほっといてくださいw

すべてのセッションが印象的だったんですが、
その中でも2つのセッション内容を自分なりに落とし込んでみました。(自己満ですみません。)
・SOLIDの原則って、どんなふうに使うの?
・BEAR.Sunday

#SOLIDの原則って、どんなふうに使うの?

SOLIDの原則の一つであるオープン・クローズドの原則にフォーカスを当てたお話でした。
この原則については、自身でも過去にかいてます、実は。
このあたり

しかし、これって実践できてる気はしていません。
新人くんの気持ちわかる〜って思ったり、こうやったほうがいいんだろなとか考えさせられたセッションでした。

close →修正を行わない
open →機能を拡張できる
この2つを同時に満たすこと=OCP準拠 !
interface使いこなさなきゃなと思いました。

フレームワークを参考にしてみると、いいとのことで、
もっとフレームワークみなきゃなと痛感しました。

「OCP違反ですよ。」て言いたくなりました。

#BEAR.Sunday

敏腕元上司(あまり人を褒めない)が尊敬していた郡山さんのセッション。
本物の郡山さんに感動しました。
フレームワークBEAR.Sundayで使われてるDI・AOP・RESTのお話でした。

 

ともわれ、使ってみなきゃということで、
クイックスタートしてみました。次回はチュートリアルします!
(リンク:https://bearsunday.github.io/manuals/1.0/ja/quick-start.html)

まずは、composerでbear/skeletonをいれる。

composer create-project -n bear/skeleton MyVendor.MyProject

composer create-project [option] vendor/project target-directory
※ -n (–no-interaction) :対話的な質問の問い合わせはしないよ

 

作成されたMyVendor.MyProjectに入って、

cd MyVendor.MyProject

 

src/Resource/Page/Kin29.phpをつくって、

<?php 
namespace MyVendor\Myproject\Resource\Page; 

use BEAR\Resource\ResourceObject; 

class Kin29 extends ResourceObject { 
    public function onGet( string $word = 'morimori!!!' ) : ResourceObject              
    { 
        $this->body = [
             'getting' => 'kin29 ' . $word
        ];

        return $this;
    }
}

 

GETパラメータなしでリクエスト

$ php bootstrap/web.php get /kin29
200 OK
content-type: application/hal+json

{
    "getting": "kin29 morimori!!!",
    "_links": {
        "self": {
            "href": "/kin29"
        }
    }
}

 

GETパラメータ「word=man」でリクエスト

$ php bootstrap/web.php get /kin29?word=man
200 OK
content-type: application/hal+json

{
    "getting": "kin29 man",
    "_links": {
        "self": {
            "href": "/kin29?word=man"
        }
    }
}

ちょっとアレンジしてます。
GETパラメータ名「word」は、onGet関数の引数名と合わせればなんでもいいようですね。

まだまだ全然わかってません…チュートリアルささっとします。
アノテーションで機能を導かれ、機能となる
print_oすごかった!地下鉄の線路図みたいでした。

 

ほかのセッションで、Hackもやってみたいなと思いました。
型に厳しいということで不慣れなことが多そうですが。
チュートリアル:http://hacklang.org/tutorial.html

 

モチベーション上がるいい機会でした。

スタッフ&スピーカー&スポンサーの皆様ありがとうございました。

コンフリクとが起きた時によく使うコマンド

 

久しぶりです。暑くなってきましたね。

Gitでコンフリクと起きた時って、「うわーめんどー><」ってなりますよね。

けど絶対王政みたいな感じで、こっちのブランチが「絶対正しいんだ!」ってときありますよね。そんな時に便利なgitオプションが下記コマンドがあります。

# 2つのブランチ間でコンフリクトしているファイル aaa.txt があるとする

# aaa.txt を現在チェックアウトしているブランチ側の対応に合わせる場合
$ git checkout --ours aaa.txt

# aaa.txt をマージさせたブランチ側に合わせる場合
$ git checkout --theirs aaa.txt

 

いつも忘れるので、エイリアスを作ろうとおもいます。

 

alias git-i-am-king='git checkout --ours $1'
alias git-you-are-king='git checkout --theirs $1'

 

しかし、
よくみたら、そんなでもないので覚え方を考えようと思います。

私たちが正しいのでわたしたちになりましょう、ね、aaa.txtさん。

$git checkout --ours aaa.txt

彼らが正しいので彼らになりましょう、ね、aaa.txtさん。

$git checkout --theirs aaa.txt

 

以上、くだらない投稿でした。

WordPressのプラグインを作ってみる。

ソースコードはこちら
https://github.com/kin29/wp-plugin-test/tree/master/admin-header-message

 

プラグインって「ハードル高そう」って思ってました。

まだよくわかってないですが、思ったほど難しくなかったです!

 

参考:

https://wpdocs.osdn.jp/Main_Page

https://hatsuka.info/wordpress/gpl

 

 

コメントを以下のように記載すると、プラグインと認識してくれます。

/**
 * Plugin Name: AdminMessage Maker
 * Plugin URI: https://github.com/kin29/wp-plugin-test/tree/master/admin-header-message
 * Description: You can set your like message in admin-page header.
 * Version: 1.0.0
 * Author: kin29
 * Author URI: https://kin29.info
 * License: GPL2
 */
/*  Copyright 2018 ki29 (email : kin29.com@gmail.com)

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License, version 2, as
	published by the Free Software Foundation.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/

 

 

管理画面ではこんな感じ。

プラグイン詳細

 

 

「有効化」すると、こんななります。

左上に「hello,kin29!」と出てるのがプラグインのしわざです。

プラグインイメージ

 

\ソースの中身/

関数addTestは、WP_Admin_Barクラスの関数add_menuを使って、

idが my-menu のtitileが hello, kin29! のもの追加してます。(見たままw)

idに関しては、my-menuっていうのが既存であるのかと思ってましたが、

idの値はなんでもokでした。

titleの中身は表示させたい言葉はご自由に入れてください。

function addTest($x){
//$x='admin_bar_menu'
 $x->add_menu( array(
    'id' => 'my-menu',
    'title' => 'hello, kin29!'
  ) );
}
add_action('admin_bar_menu', 'addTest');

 

 

\add_action()何しとるん?/

グローバル変数の$wp_filterにキーとバリュー追加してるようですね。

上のコードを例にすると、

$wp_filter[‘admin_bar_menu’]に関数addTest()を追加したようです。

 

wp-include/plugin.phpより

function add_action($tag, $function_to_add, $priority = 10, $accepted_args = 1) {
	return add_filter($tag, $function_to_add, $priority, $accepted_args);
}
function add_filter( $tag, $function_to_add, $priority = 10, $accepted_args = 1 ) {
	global $wp_filter;
	if ( ! isset( $wp_filter[ $tag ] ) ) {
		$wp_filter[ $tag ] = new WP_Hook();
	}
	$wp_filter[ $tag ]->add_filter( $tag, $function_to_add, $priority, $accepted_args );
	return true;
}

 

 

 

\GPLとは?/

コメントアウトにある、License表記ですが、

部分はcodexでは以下のように書いています。

慣例として、標準プラグイン情報の次にプラグインのライセンス情報を書きます。多くのプラグインは WordPress と同じ GPL2、ないし GPL2 互換のライセンス (英文) を用いています。

多くのプラグインに沿って、GPL2と私は書いてます。

GPL=GNU General Public License。フリー(自由)ソフトウェアライセンスの事。WordPressやGithubなどはこのライセンスに属している。コピーライトの逆の「コピーレフト」であり、利用・改変・再配布ができる。GPLで配布したものが、再配布がされるとそれ自身もGPLとなり、自由の保証が広がっていき、良いコードがいろんな人の手で作られるのかなと思います。

 

 

\まとめ/

プラグインは意外と簡単にできる。(物によるが)

プラグイン情報(licenseとか)はちゃんと書こう!

 

リダイレクトについて

 

こんにちは、恵方巻きの季節ですね!
それにしても、無性にカラオケに行きたい気分です!

 

.htaccessの書き方というか、
リダイレクト処理がよくわかってなかったので、
いろいろ試してみたことを書きます。

 

リダイレクトとは?
→「出力先を変える」(=転送)です。

 

動きとして
その1、出力先のみを本来のものとは変える
例) https://ドメイン/old.htmlに アクセスしたけど、
出力内容はhttps://ドメイン/new.html である。

その2、出力先と表示URLを本来のものと変える
例) https://ドメイン/old.htmlに アクセスしたけど、
出力内容はhttps://ドメイン/new.html で、
URL欄もhttps://ドメイン/new.htmlになってる。

の2つがあるのかなって私は思ってます。

 

\ 想定動作 /
https://ドメイン/dummy/new.html にアクセスした
https://ドメイン/dummy/old.html の出力内容を表示させる。
※ .htaccess は dummy/ 直下に置くとする

 

まず、リダイレクトの可否を設定。
デフォルトはOffのため、
以下の記述をしないとリダイレクトはできませんでした。

RewriteEngine On

 

その1:
http://ドメイン/old.html でアクセスした時、
http://ドメイン/dummy/new.html の内容を表示する。
URL欄は http://ドメイン/dummy/old.html のまま

# オプション[L]で、以降のRewrite機能(RewriteRuleとか)の終了を意味する
RewriteRule ^old\.html$ new.html [L]

→ 正規表現パターン(^old\.html$)も置換パターン(new.html)も、
.htaccessがあるディレクトリからの相対パスっぽい。

….RewriteRuleの書き方

RewriteRule 正規表現パターン 置換パターン オプション

 

こんな書き方もある。

RewriteBase /dummy
RewriteRule ^old\.html$ new.html [L]

→ RewriteBaseは置換パターン(new.html)が相対パスの場合、使われる。
正規表現パターン(^dummy/old\.html$)に関係ないっぽい。

 

 

 

その2:
http://ドメイン/old.html でアクセスした時、
http://ドメイン/dummy/new.html の内容を表示する。
URL欄も http://ドメイン/dummy/new.html に変わる。

# [R]だけ(指定なし)だと302リダイレクト
RewriteRule ^old\.html$ /dummy/new.html [R]

→ http://ドメイン/dummy/new.html に。想定通り◎

 

RewriteRule ^old\.html$ /new.html [R] 

→ http://ドメイン/new.html に行っちゃう。

RewriteRule ^old\.html$ new.html [R]

→ http://ドメイン/home/アカウント/ドメイン/*****/dummy/new.html
にいってもうた!なんでだっけ?><

 

他にも2つもあり。

RewriteRule ^old\.html$ http://ドメイン/dummy/new.html [R]

↑個人的に絶対パスだし、見やすい。

RewriteBase /dummy
RewriteRule ^old\.html$ new.html [R]

 

 

■301リダイレクトを指定

RewriteRule ^old\.html$ http://ドメイン/dummy/new.html [R=301]

 

\ 疑問 /

■複数フラグのとき、書き順は関係ないの?

RewriteRule ^old\.html$ /dummy/new.html [L,R]
RewriteRule ^old\.html$ /dummy/new.html [R,L]

→ 挙動は同じに見えたので、関係なさそう?

ただ、

RewriteRule ^old\.html$ new.html [L,R]
RewriteRule ^old\.html$ new.html [R,L]

だと、http://ドメイン/home/アカウント/ドメイン/*****/dummy/new.html
にいってもうた![R]だけの時と同じ感じ。ってことは、R→Lの順番なのか?

 

フラグ「L」「R」について

L :マッチしたらRewriteを止めます。以降のルールは無視する

R :指定したURLに変える。[R=303]のようにリダイレクトコードも付加できる。

参考:http://japache.infoscience.co.jp/japanese_1_3_6/manual/mod/mod_rewrite.html

 

 

■301リダイレクトと302リダイレクトの違いは?
・301リダイレクト →キャッシュする
・302リダイレクト →キャッシュしない

 

 

 

\ まとめ /

まだまだ「?」が多すぎました。

 

 

変数のスコープ(=有効範囲)

 

 

 

今回のお題は

変数のスコープ、有効範囲についてです。

 

 

\登場人物はー?/

・ローカル変数

・グローバル変数

・静的(static)変数

 

コメントつけまくったらすんごーい醜いww

 

コミットコメント

 

▶️ローカル変数

関数内で定義されて、有効範囲はその関数内のみ。

4行目の$aはローカル変数ではない。

  4 $a = 1;
  5 function showLocalNum()
  6 {
  7   //-----ローカル変数 $aのスコープ ここから-----
  8   $a = 2; // ←ローカル変数 $aの定義
  9   print 'ローカル変数 $a: ' . $a . "\n";
 10   //-----ローカル変数 $aのスコープ ここまで-----
 11 }
 12 showLocalNum(); // 2 →ローカル変数 $a
 13 print '4行目の$a: ' . $a . "\n"; //8行目のローカル変数の$aではない。

 

ローカル変数 $a: 2
4行目の$a: 1

 

▶️グローバル変数

関数内外問わず定義され、有効範囲はPHPスクリプト全体

 17 $g = 1;
 18 function showGlobalNum()
 19 {
 20   global $g;
 21   $g++;
 22   print 'グローバル変数 $g: ' . $g . "\n";
 23 }
 24 print '関数showGlobalNum実行前の17行目の$g: ' . $g . "\n"; // 1 まだグローバル変数になってない。
 25 showGlobalNum(); // 2 →グローバル変数 $g
 26 showGlobalNum(); // 3 →グローバル変数 $g
 27 print '関数showGlobalNum実行前後の17行目の$g: ' . $g . "\n"; // 3 グローバル変数 $gになってる

 

関数showGlobalNum実行前の17行目の$g: 1
グローバル変数 $g: 2
グローバル変数 $g: 3
関数showGlobalNum実行前後の17行目の$g: 3

 

▶️静的(static)変数

関数内で定義される。初期化は最初の一回のみ行われ、その後は前の値が残る。

 31 //static $d = 100; //関数外では定義できない
 32 function showStaticNum()
 33 {
 34   static $s = 100; //←ローカル変数 $sの定義
 35   $s++;
 36   print '静的(static)変数 $s: ' . $s . "\n";
 37 }
 38 showStaticNum(); // 101
 39 showStaticNum(); // 102
 40 showStaticNum(); // 103

 

静的(static)変数 $s: 101
静的(static)変数 $s: 102
静的(static)変数 $s: 103

 

 

<まとめ>

ローカル変数しか、あんまり使わんけども。

 

 

requireとincludeの違い

 

\ 今回の主人公はー?こちらっ /

・require

・require_once

・include

・include_once

 

 

そもそも上の四つは外部ファイルを参照するときに使います。

requireとincludeの違い

require と include はほぼ同じだが、失敗した場合の動きが異なる。

require → 致命的なエラーを発生する。スクリプトの処理がそこで止まってしまう。 include → 警告 (E_WARNING) を発するが、スクリプトの処理は続行する。

 

<イメージ>

require …

「君が必要なんだ!だから、君がいないならもうやめてしまおう、

こんなこと。」てきな

 

include…

「お前もくる?あ、どっちでもいいよ?無理なら全然いいから〜、

お前おらんでもできるから。」

てきな。

 

※あくまでも個人的なイメージです。

 

 

 

では、require と include を比べて見ましょう。

こんなファイルを用意。requireVsInclude.php

  1 <?php
  2
  3 /**
  4  * 今回比較するもの
  5  * - require
  6  * - include
  7  */
  8
  9 //わざと失敗させる:該当ファイル(notFound.php)がない
 10 echo "---include(Error) START---\n";
 11 include(dirname(__FILE__) . '/notFound.php');
 12 echo "---include(Error) E N D---\n\n";
 13
 14 echo "---include START---\n";
 15 include(dirname(__FILE__) . '/dummy/include.php');
 16 echo "---include E N D---\n\n";
 17
 18 //わざと失敗させる:該当ファイル(notFound.php)がない
 19 echo "---require(Error) START---\n";
 20 require(dirname(__FILE__) . '/notFound.php');
 21 echo "---require(Error) E N D---\n\n";
 22
 23 echo "---require START---\n";
 24 require(dirname(__FILE__) . '/dummy/require.php');
 25 echo "---require E N D---\n\n";

 

いざ、実行!

$ php requireVsInclude.php
---include(Error) START---

Warning: include(/xxxxxx/php/src/notFound.php): failed to open stream: No such file or directory in/xxxxxx/php/src/requireVsInclude.php on line 11

Warning: include(): Failed opening '/xxxxxx/php/src/notFound.php' for inclusion (include_path='.:') in/xxxxxx/php/src/requireVsInclude.php on line 11
---include(Error) E N D---

---include START---
includeしました。
---include E N D---

---require(Error) START---

Warning: require(/xxxxxx/php/src/notFound.php): failed to open stream: No such file or directory in/xxxxxx/php/src/requireVsInclude.php on line 20

Fatal error: require(): Failed opening required '/xxxxxx/php/src/notFound.php' (include_path='.:') in/xxxxxx/php/src/requireVsInclude.php on line 20

 

11行目のincludeで存在しないファイルですとWarningされますが、

処理は続けていますね。

そして、次のinclude処理(15行目)は正しく行われています。

一方で、20行目のrequireは「存在しないファイルをopenできなかった」

とFatalErrorしています。

よって、ここ(20行目)で処理が中止され24行目のrequire処理は実行されませんでした。

 

 

つづいて….  require_onceとinclude_onceを比較します。

こんなファイルを用意。once.php

  1 <?php
  2
  3 /**
  4  * 今回比較するもの
  5  * - require_once
  6  * - include_once
  7  */
  8
  9 //~_onceつかってみる
 10 echo "---require START---\n";
 11 require(dirname(__FILE__) . '/dummy/require.php');
 12 echo "---require E N D---\n\n";
 13
 14 echo "---require_once START---\n";
 15 require_once(dirname(__FILE__) . '/dummy/require.php');
 16 echo "---require_once E N D---\n\n";
 17
 18
 19 echo "---include START---\n";
 20 include(dirname(__FILE__) . '/dummy/include.php');
 21 echo "---include E N D---\n\n";
 22
 23 echo "---include_once START---\n";
 24 include_once(dirname(__FILE__) . '/dummy/include.php');
 25 echo "---include_once E N D---\n\n";

 

いざ、出 陣!

ちなみに

/dummy/require.php がよばれると「requireしました。」をechoします。

/dummy/include.php がよばれると「includeしました。」をechoします。

$ php once.php
---require START---
requireしました。
---require E N D---

---require_once START---
---require_once E N D---

---include START---
includeしました。
---include E N D---

---include_once START---
---include_once E N D---

11行目で一度requireされたので、15行目のrequire_onceでは呼び出されませんでした。

includeでも同様で、

20行目で一度includeされたので、24行目のinclude_onceでは呼び出されませんでした。

 

 

\ まとめ /

・絶対必要なファイルはrequireでよぶ。

何回呼んじゃうか、わからん時はrequrie_once使っとこう。

 

参照(リファレンス)渡しは、ニコイチになる呪文

久々にPHPネタを書きます。

といっても参照渡しって他の言語でもあるかと思いますが、、、長い目でみてください。

▶︎参照(リファレンス)渡しとは

引数の渡し方の一つ。
引数の渡し方では、「参照渡し」以外に、
ごく一般的でよく見る普通の引数の渡し方に「値渡し」がある。

 

まず、ごく一般的でよく見る普通の引数の渡し方の

「値渡し」を見ていきます。

/**
 * 数値型を文字列型に変更する
 *
 * @param integer $number
 * @return string $number
 */
function convertString($number)
{
  //return (string)$number;のが冗長ではないが、そこは我慢。
  $number = (string)$number;
  return $number;
}

$a = 1;
convertString($a); 
var_dump($a); //int(1) 返り値を$aに格納していないため、$a = 1のまま

$b = 2;
$b = convertString($b);
var_dump($b); //string(1) "2"

 

 

その後に、「参照渡し」を見てみる。

//PHP5.4.0から仕様変わったやーつー。※今回はPHP5.5を想定
/**
 * 数値型を文字列型に変更する
 *
 * @param integer $number
 * @return string $number
 */
function convertString_reference(&$number)
{
  $number = (string)$number;
  return $number;
}

$c = 3;
//PHP5.4.0以前ではconvertString_reference(&$c)でも呼べる
convertString_reference($c); //$numberと$cがニコイチとなる。
var_dump($c); //string(1) "3"

$d = 4;
//$numberと$dがニコイチ(同等)となる。
$d = convertString_reference($d); 
var_dump($d); //string(1) "4"

参照渡しをすると、ニコイチになれる!

ニコイチってもう古いんかな?昔はやってたからいい例えと思って使ってみたw

参照渡しで渡された引数は、関数内のローカル変数と同等になる。

片方が+1されると、他方も+1される、まさしくニコイチ!

 

 

影響範囲を考えないと使いにくそうで、自から使ったことはまだないですが、

使えるいいタイミング見つけてみたいと思います。

awkコマンド良き。

\ 全体コードはこちら /
https://gist.github.com/kin29/18349f0aec11df73325ab466f8621232
 

awkって「オーク」と読むみたいです。
awkって訳すと、

  • 不自然な
  • ぎこちない

とかって意味らしいですが、これには全く関係なく、

    開発者3人の名前(Aho、Weinberger、Kernighan)の頭文字から命名された。

らしいです。

 

▶︎awkコマンドとは?

テキストデータの加工や処理などができる。

 

▶︎使い方

パイプ「|」で使うことが多いです。
パイプは、出力結果をパイプ後のコマンドに渡すことができるヤーツーでしたね。

# 1が表示される
# awkコマンドによってprintが実行される
echo 1 2 | awk '{print $1}'

 

計算ができる

# 3(=1+2)が表示される 
echo 1 2 | awk '{print $1+$2}'

 

「;(セミコロン)」で複数処理できる

# 3(=1+2)が表示される 
echo 1 2 | awk '{x=$1+$2; print x}'

 

seqコマンドと組み合わせる

seq 1 10 | awk '{x=$1+100; print x}'
101
102
103
104
105
106
107
108
109
110

出力する条件を決めれる。

# 3(=1+2)が表示される 
echo 1 2 | awk '$1{print}' 

 

ファイル(dummy/awk.txt)の出力結果を加工する
dummy/awk.txt

1 2
3 4

→ awk.txtはファイルなので「|」はいらない

# awk '{print $1 * $2;}' dummy/awk.txtと同じ
$ awk '{print $1 + $2;}' < awk.txt
3
7

seqを使ってワンライナー書くよ。

ワンライナーって短い命令文なのに、いっぱい仕事してくれてスマート^^

全体コードはこちら!
https://gist.github.com/kin29/8950d25cab8bd877efff88764515cf66

 

▶︎シェル変数

x=3
echo $x  #echo xではない。

出力結果

3

 

 

# コマンドを変数に入れたい時は「`」で囲む
d=`date`
echo $d

出力結果

2018年 1月 5日 金曜日 22時42分54秒 JST

 

▶︎seqコマンド

# 初期値1,間隔1(デフォルト),最大値10

$ seq 1 10
1
2
3
4
5
6
7
8
9
10

 

# 初期値1,間隔2,最大値5

$ seq 1 2 5
1
3
5

 

▶︎ forループ

$ for a in 1 2 3; do echo $a; done
1
2
3

$a に 1 を代入 → echo $a(=1)
$a に 2 を代入 → echo $a(=2)
$a に 3 を代入 → echo $a(=3)

↑と同じ結果となる

# seq 1 3は文字じゃなくてコマンドなので「`」で囲む
for b in `seq 1 3`; do echo $b; done

 

 

もっといろんなコマンド知りたい!!!
次はawkコマンドとかを探求したいと思います。