質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

6回答

6168閲覧

地味に便利なPHP関数を教えてください

livetc

総合スコア86

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

1グッド

10クリップ

投稿2015/09/10 08:54

編集2015/09/11 09:43

僕はあまりPHPの関数を知りません。

地味に便利だよ!という関数とシチュエーションを教えてください。
自分が知らない関数の発見につなげたいです。

ちなみに僕が長い間知らなかった、地味便利関数はmaxとminです。
可読性があがりました。

php

1// if($i < 0) $i = 0; 2$i = max($i, 0);

9/11 追記です。
emptyも個人的には好きで、主に分岐を増やしたくないHTMLテンプレートへの埋め込み時に重宝します。nullもfalseも空配列もsetも検出してくれるので。

php

1<?php if(!empty($list)): ?> 2<?php endif; ?>

この関数使うと分岐が少なくなってスマートになるよ、とか小技的(?)な関数が知りたいかもですね。

yudedako👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答6

0

var_dump
デバッグの時は圧倒できに便利です。
型もわかるので

投稿2015/09/10 14:11

kutu

総合スコア257

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/09/10 15:37

var_exportもいいですね。返値で受け取れるので、デバッグログなんかに出しやすいです。
livetc

2015/09/10 15:47

var_dumpを知っているだけで開発効率がぐんっと良くなりますよね。 回答ありがとうございます。 >osaponさん var_export!これ知らなかったです!ログで使えそうですね。ありがとうございます。
saito.ruka

2015/09/11 05:49 編集

スニペットに echo '<pre style="text-align:left;">'; var_dump(); echo '</pre>'; って登録しておくときれいに出てくるので地味に重宝してます。
livetc

2015/09/11 09:31

saito.rukaさん やはり皆さんやるんですね。僕はグローバル関数でdump用関数入れたりしますね。 function d($val){ echo "<pre>"; var_dump($val); echo "</pre>"; }
guest

0

ob_start
ob_get_contents

長いHTMLを変数に入れたいときとかに便利

投稿2015/09/10 11:26

KazuhiroHatano

総合スコア7804

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

livetc

2015/09/10 13:40

HTMLのテンプレートなんかを読み込んで必要箇所を置換して出力、みたいな場面で使うんでしょうかね。 回答ありがとうございます。
KazuhiroHatano

2015/09/10 15:26

こいつが一番輝いたのはメール送信処理のときでしたね。
livetc

2015/09/10 15:43

>メール なるほど!参考になりました。
guest

0

ベストアンサー

関数ではないのですがPHP5.3で導入されたエルビス演算子

php

1$foo = 'bar'; 2if(isset($_POST['baz'])){ 3 $foo = $_POST['baz']; 4}

こう書いてたのが

php

1$foo = @$_POST['baz'] ?: 'bar';

こんな感じに書き直せます

@でNotice抑制しているのがちょっとモヤモヤするところなのですがPHP7からは ?? 演算子なるものができるらしく、さらに

php

1$foo = $_POST['baz'] ?? 'bar';

と書けるらしいです

投稿2015/09/14 02:34

khirose

総合スコア251

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KazuhiroHatano

2015/09/14 10:46

ActionScriptとかだとそういうのが $hoge=$hoge or $fuga; で書けててそれに慣れてたので 三項演算子だとちょっとコード長くなるのが 不満があったところだったのですが できるようになってたのですね
livetc

2015/09/14 12:22 編集

おお!エルビス演算子知りませんでした。 これはスマートになりそうですね。 (@はちょっとモヤっとしますね) 関数を教えてください、と言いながらエルビス演算子をBESTアンサーにさせていただきました。関数ではないですがスマートに書きたいという意図に合致したので。 回答ありがとうございます。
sounisi5011

2015/09/15 16:42 編集

エルビス演算子の例示には、3点の問題があります。 - if文の例示はissetのみによる判定なのに対し、エルビス演算子の例示は論理値(以下、boolean)として判定している - 変数$fooに対する書き込み回数が異なる - @演算子を利用している 順に説明します。 # if文の例示はissetのみによる判定なのに対し、エルビス演算子の例示は論理値(以下、boolean)として判定している エルビス演算子による例示の動作は、以下とほぼ等価です。 if (isset($_POST['baz']) && $_POST['baz']) { $foo = $_POST['baz']; } else { $foo = 'bar'; } issetは「変数が定義されており、かつ、変数の値がnullではない」場合にtrueとなります。 しかしエルビス演算子の場合、$_POST['baz']をbooleanに変換して判定を行うため、@演算子により抑えられている「変数が未定義」の場合以外に、以下の値でもfalseと判定されます。 - false // booleanのfalse - 0 // integerのゼロ - 0.0 // floatのゼロ - "" // 空文字列 - "0" // 文字列のゼロ - array() // 空の配列 - null //null - // 空のタグから作成された SimpleXML オブジェクト (http://php.net/manual/ja/language.types.boolean.php#language.types.boolean.casting より) このうち、変数$_POSTに代入されるのは文字列と配列のみです。 (http://qiita.com/mpyw/items/2f9955db1c02eeef43ea#is_string-%E9%96%A2%E6%95%B0is_array-%E9%96%A2%E6%95%B0 を参照) このため、回答にあるif文の例では$_POST['baz']が送信されていない場合のみ変数$fooの値が'bar'となっていた処理が、 エルビス演算子の例では空文字列("")、文字列のゼロ("0")、空の配列の場合に変数$fooの値が'bar'となります。 空文字列と空の配列は送信されていない値として扱っても良いかもしれませんが、文字列のゼロはどうでしょう。「送信されていない値」として扱うべきでしょうか? # 変数$fooに対する書き込み回数が異なる オブジェクトのプロパティでは、変数代入のように書き込まれた場合に任意の処理を行う機能が存在するため、変数$fooに対する書き込み回数が違う点でも等価ではありません。 (回答のif文の例示は2回、エルビス演算子は1回のみ書き込んでいます)。 # @演算子を利用している @演算子はエラーが抑止されるため、多用するとバグの元となります。 また、@演算子はパフォーマンスの悪化も招きます。 (http://www.programming-magic.com/20080511005743/ より) ただこれについては解答でも「@でNotice抑制しているのがちょっとモヤモヤするところ」とありますね… --- ところで、冒頭のエルビス演算子による例示をif文に書き換えた処理が"ほぼ"等価な理由として、set_error_handler関数を利用すると@演算子が出力するはずだったエラーを取得できることが挙げられます。 書き換えたコードではそもそもエラーが発生しないため、その意味において@演算子によるエルビス演算子の処理とは「厳密に等価」ではありません。 ただ、この差は、記述されている判定処理そのもの、及びこのコメントで指摘している問題とは一切無関係ですので、無視しても問題はありません。
sounisi5011

2015/09/15 16:11

ちなみに、回答にあるif文の例示と完全に等価な処理は、エルビス演算子では記述できません。 代わりに三項演算子を利用することで実現できます。 $foo = isset($_POST['baz']) ? $_POST['baz'] : 'bar'; エルビス演算子はもっと別の、false判定されても構わない変数に対して利用するべきでしょう。
guest

0

reset(), end()
配列の最初、最後の値を取得する。
結構知らない人が多いのでビックリしました。

マジックメソッド系
Rubyをよく使うので、method missingと同じことがPHPでも出来るのかと感動した記憶があります。
嫌いな人は嫌いな機能だと思いますが汗

投稿2015/09/11 10:19

k.tada

総合スコア1679

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

livetc

2015/09/14 12:12

reset,end知らなかったです!地味便利ですね。 マジックメソッドはconstructくらいしか使ったことないですが、小技で使えそうですね。 回答ありがとうございます。
guest

0

serialize
unserialize

WordPressを魔改造した時、DBに配列格納するときに便利でした。
あんまりこういう方法はよろしくないのかもしれませんが…;x;

投稿2015/09/10 09:10

saito.ruka

総合スコア138

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

livetc

2015/09/10 09:37

配列を文字列として保持しておきたいとき、serializeは便利ですよね。APIのレスポンスキャッシュなんかで僕も使います。 回答ありがとうございます。
saito.ruka

2015/09/14 00:05

nanndemoiikaraさん 情報ありがとうございます!
guest

0

str_repeat

地味だけど便利な関数といえばこれを忘れてました
HTMLコードを生成するクラスだとかで
インデントを綺麗にするときに重宝します

vsprintf

これも地味に便利、implodeでは対応できない
n個ごとに特定のフォーマットを繰り返すみたいな配列の文字列化が
str_repeatと組み合わせると簡単にできます

投稿2015/09/11 11:21

KazuhiroHatano

総合スコア7804

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

livetc

2015/09/14 12:16

こちらも初めて知りました。プログラム側で文字列を作るときに使う場面が出てきそうです。 回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問