式を演算子を使ってまとめたい。 - PHPプロ!Q&A掲示板

2609

  • 0P

式を演算子を使ってまとめたい。

質問日時 / 2010年3月9日 11:58    回答数 / 7件

Questioner:  php_baby  このエントリーをはてなブックマークに追加 

キーワード / 三項演算    比較演算子    演算子   

  1.     //入力された西暦のフォルダの有無を調べ、無ければつくる。
  2.  
  3.   if ( !is_dir ( ROOTPATH . "/$year" ) ) {
  4.     mkdir ( ROOTPATH . "/$yearr" ) ;
  5.   }
  6.   
  7.   //日時のフォルダ調べ、なければ作る
  8.  
  9.   if ( !is_dir ( ROOTPATH . "/$year/$date" ) ) {
  10.     mkdir ( ROOTPATH . "/$year/$date" ) ;
  11.   }

上記のように、フォルダの有無を調べ、その有無によって、さらに、その中にフォルダを作るような
そんなコードを書きました。
ROOTPATHは、固定のパスです。

ボスに見せたところ、演算子を使ってもっとかっこいいコードを書け!!
さらに、うまくいかないときに、エラーを返すようにしろ!

と言われてしまいました。

いろいろ考えてみたのですが、
まず、演算子で上手にまとめる方法がよくわかりません。

わかるかた、おしえてください。
よろしくお願いします。

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┣A01magicflute2・関数化 ・三項演算子 ・mkdir recursiveパラメー
┃┗A01-1php_babyすみません。 mkdirのrecursiveパラメータをTRUEと
┃ ┣A01-1-1shimix>mkdir(ROOT/$year/$date , TRUE); recursiveは第3
┃ ┗A01-1-2magicflute2> また、ラッパー関数というのがわからないので教えて
┣A02kaitau> ボスに見せたところ、演算子を使ってもっとかっこい
┣A03signal>>CODE <?php try { if (!is_dir(ROOTPATH."/{$y
┗A04php_babyみなさま、いろいろとご教授いただきありがとうござい

回答一覧

並び替え:

A01
answerermagicflute2 [3月9日 12:53] (最終編集:3月9日 13:08)

・関数化
・三項演算子
mkdir recursiveパラメータをTRUE
要はmkdirのラッパー関数を作るという事。
うまくまとめると、4行以内で書ける。

この意見に回答する

ツリーへ TOPへ

A01-1
replyerphp_baby [3月9日 13:44] (最終編集:3月9日 13:47)

すみません。

mkdirのrecursiveパラメータをTRUEというのは

mkdir(ROOT/$year/$date , TRUE);
と書けば、$yearフォルダが、特になくても階層ごと$dateフォルダが作られると判断したのですが、
うまくできませんでした、
どこが間違っているのでしょうか?

また、ラッパー関数というのがわからないので教えてもらえますか?

よろしくおねがいします。

ちなみに、phpのバージョンは5.2.6です。

この意見に回答する

ツリーへ TOPへ

A01-1-1
replyershimix [3月9日 13:53] (最終編集:3月9日 13:57)

>mkdir(ROOT/$year/$date , TRUE);

recursiveは第3引数なんだが・・。せめて関数の引数くらいはマニュアルで確認してから取りかかって欲しい。

  http://www.php.net/manual/ja/function.mkdir.php

三項演算子はこのあたり・・

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

この意見に回答する

ツリーへ TOPへ

A01-1-2
replyermagicflute2 [3月9日 16:00] (最終編集:3月9日 16:07)

> また、ラッパー関数というのがわからないので教えてもらえますか?
私の解釈は以下の通りです。
http://e-words.jp/w/E383A9E38383E38391E383BC.html

今回ケースだと、以下の様に、機能拡張・初期設定をした関数です。
標準関数を少しだけ、目的にあった形にします。
mkdir前にディレクトリ存在チェック
・エラー処理
・パーミッション デフォルト値の設定
・recursiveパラメータ デフォルト値の設定
  1. <?php
  2. /**
  3.  * PHP5なので、引数にデフォルト値を設定できます
  4.  * @param  $path      string
  5.  * @param  $mode      int
  6.  * @param  $recursive boolean
  7.  * @return boolean
  8.  */
  9. function wrapper_mkdir( $path$mode=0705$recursive=TRUE )

この意見に回答する

ツリーへ TOPへ

A02
answererkaitau [3月9日 13:53]

> ボスに見せたところ、演算子を使ってもっとかっこいいコードを書け!!
> さらに、うまくいかないときに、エラーを返すようにしろ!

多分これは教育の意味を込めての事なんじゃないかな。

だとすると、自分で考えて解くか、わからない事はそのボスに
聞くべきだと思ったり。

趣味ならともかく、仕事なら、自分の理解度を上司に示して
伸ばしてもらうのも大事な事だと思いますが。
というか、私が上司だったら、ネットで調べただけの成果物で
「出来ました」といわれても、「コイツどこまでわかってるんだ?」ってなります。
まぁ、一般論では無いので、意見が分かれるところではありますが。

wikipediaに出てくるような単語の意味、とかならともかく、
ここをこうしろ、と言われて、わかってないのに「はぁ、わかりました」
って持ち帰られるのが一番危険なんですよね。

この意見に回答する

ツリーへ TOPへ

A03
answerersignal [3月10日 23:28]

  1. <?php
  2. try {
  3.   if (!is_dir(ROOTPATH."/{$year}") &&
  4.       !@mkdir(ROOTPATH."/{$year}")) {
  5.     throw new exception("/{$year} が作れない");
  6.   }
  7.   if (!is_dir(ROOTPATH."/{$year}/{$date}") &&
  8.       !@mkdir(ROOTPATH."/{$year}/{$date}")) {
  9.     throw new exception("/{$year}/{$date} が作れない");
  10.   }
  11. } catch (exception $e) {
  12.   print $e->getmessage();
  13.   print "のは全てボスの責任です";
  14. }
  15. ?>

この意見に回答する

ツリーへ TOPへ

A04
answererphp_baby [3月11日 10:24]

みなさま、いろいろとご教授いただきありがとうございました。
確かに、教育の意味も込めてのことだと思いました。

最終的に、まとめたので、
紹介します。

エラーについては、今回はfalseを返すのみになってます。

  1. if ( ( ( is_dir( ROOTPATH . "/$year" ) || mkdir ( ROOTPATH . "/$year" ) ) && ( is_dir( ROOTPATH . "/$year/$date" ) || mkdir ( ROOTPATH . "/$year/$date" ) ) ) ) {
  2. } else {
  3. return false;
  4. }

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
PHPのHTML埋め込み記述について
 このエントリーをはてなブックマークに追加 
A
$_POST["data"] == "男" ? $val = "checked" : $val = "" ; の意味は以下と同じです。 if($_POST["data"] == "男"){ $val = "checked; } e...

>>続きを読む

kende様のご指摘通り、三項演算子を使用する際には、コードの複雑度などを考慮する必要がありますね。書きやすさと共に可読性も追求したいところですね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)