• WordPress 4.3のコアコントリビューターになったりしました。

    WordPress 4.3のコアコントリビューターになったりしました。

    ここ最近のものってばかりでもないですけど、いろんなコントリビュートしました。

    WordPress 4.3 のコアコントリビューターになりました

    今更ですが、WordPress 4.3のコアコントリビューターになりました。と言っても一行直しただけなんですけどね!!!

    チケット:#33254 (Access undefined $current_user in update_option_new_admin_email().) – WordPress Trac

    そのとき書いたブログ:WordPressのTracにチケットを投げたら採用されました。| Toro_Unit

    ちゃんとバッジも貰いました。今年の目標の一つだったのでめちゃくちゃ嬉しいです。4.4も頑張りたいです。

    WooCommerce Breadcrumb Permalinks のコントリビューターになりました

    WordCamp Kansai 2015の懇親会で、WooCommerceの中の人のパーマリンクのプラグインにプルリクエスト送るよ!みたいな話になったのですが、プルリクを投げてマージしてもらいました。プルリクエスト投げたら「ありがとう」って帰ってきてびびりました。

    今更ですけど、Smart Custom Fieldsのコントリビューターになりました

    もうかなりくらい前の話ですけど、プルリク投げつけまくってマージしてもらいました。自分の欲しい機能がどんどん付いていくのがおもしろかったです。

    思うこと

    ちょっとイラッとしたり、こうなったらいいのになーみたいなのがあったら、とりあえずコードを書いて送りつければ良いと思います。

    プルリクエストは貰う側も結構嬉しいものですし、自分のコードがダメなら単に拒否されるだけで別に世界が滅んだりとかしないです。

    遠方の人や海外の人とこうやってつながっていける感がとにかく楽しいです。実際にWordCampとかで会ったとき、とりあえず「プルリクありがとう!」って話が出来たりします。

    スペルミスの修正とかでも全然良いと思います。書いてる側は案外気づいてない。

    人のコードを読むのは勉強になることも多いし、みんな気軽にやってみればといいと思いました。

     

     

     

  • gulp-sass-bulk-importを使ってSassの@importをすっきり管理する。

    皆さんSass書いてますかー!gulpしてますかー!

    唐突ですがRubyのgemにsass-globbingというものがありまして、そいつを使うと、

    @import "object/component/*.scss";
    @import "object/project/*.scss";
    @import "object/utility/*.scss";
    

    みたいな感じで該当するファイルを勝手に読み込んでくれるという実に便利なgemです。Ruby版のSassで使えます。

    参考: sass-globbingでSassファイルをお手軽管理 – Qiita

    ただ。。。。
    やっぱり速度面はnode-sassの方が良いし、WindowsでRubyどうするの?とか聞かれるのがかったるいし、ruby-sassだとそれのバージョン管理もしないといけないし、bundlerの使い方とか聞かれるのも面倒くさいです。gulp-ruby-sassもなんか書き方が特殊だし。。。

    package.json、composer.json、(たまにbower.json)、Gemfileを管理するのは地獄過ぎる気がしたので、gulp-sassでやりきりたいなぁと思ってましたけど、それはそれで@import地獄になります。PHPですらautoload出来るんだから何とかしてくれよと思うわけです。

    別にrailsとかmiddleman案件だったら良いんだろうけど、あいにくこちらはレンタルサーバー案件メインのWordPressが得意な田舎のフロントエンドエンジニアと来てます。

    なので、gulp-sassでもsass-globbing的なコトが出来たら楽だなぁと思って探してたらありました。

    mathisonian/gulp-sass-bulk-import

    サンプルコード

    var gulp = require('gulp');
    var bulkSass = require('gulp-sass-bulk-import');
    var sass = require('gulp-sass');
    
    gulp.task('sass', function () {
        gulp.src('src/styles/**/*.scss')
            .pipe(bulkSass())
            .pipe(sass())
            .pipe(gulp.dest('dist/styles'));
    });
    

    こんな感じで、gulp-sassの直前にpipeしてあげれば動きます。

    とりあえず半月触ってますけど、とくにバグっぽいものには出会ってません。見つけたらプルリクエスト投げましょう。

    注意事項

    基本的に名前順にファイルが読まれるので、ちゃんとモジュール化できてないCSSだと、読み込み順の関係でおかしくなったりします。まぁそれは、CSSの設計がおかしいと思うので、メロン本とか読んでSMACSSなりFLOCSSなりITCSSなりやればいいんじゃないでしょうかね。

     

  • Material Design Liteがクールだからみんな使えば良いと思います。

    Material Design Liteがクールだからみんな使えば良いと思います。

    予告通り書きます。

    Facebookのタイムラインで「CSSフレームワークをそのまま使うって発想から抜けないと良くないよ」みたいな話がありまして。

    根本的には僕も全力で同意するのですが、それでもBootstrapとかFoundationを案件で使う気が全くしないわけですよ。両方とも何回か扱いましたけどあんまり良い思い出は無いです。フォームとかボタンなどプロパティレベルでは良く参考にしてはいますが。

    使いこなしてる人凄いと思います。habakiriつくったキタジマさんとかLightning石川さんとか。WordCamp KansaiのときにBootstrapとの付き合い方聞いておけば良かったです。

    さて、唐突ですがMaterial Design LiteってHTML/CSSフレームワークがありまして。

    Google謹製のCSSフレームワークで、かの有名なMaterial DesignをHTML/CSSフレームワークとして実装した奴です。

    そんな自分がどうしてMaterial Design Liteに対してテンションが上がるのかと言うことをつらつらと。

    全部のクラスにmdlというプレフィックスが付いている

    6割くらいこれです。これだけでホントに使いやすい。

    やっぱり、WEBサイト制作をやってて、それなりにゴリゴリCSSを書いている人ならある程度使い回しているモジュールとかを持っていると思うんですけど、bootstrapのクラスって.containerだとか、.navだとか.btnだとか一般名詞をいっぱい使っていやがるので、これが本当にうっとうしい。

    クラス名を見たところでこれが、bootstrapのclassなのか、そうでないのかがとにかく区別しづらい。特に必要なモジュールだけ取ってきてるような場合は、サイトごとに違ったりしてすっごい面倒。

    使う側でプレフィックスつけて解決するのも面倒。というかなんでライブラリの都合にこっちが合わせないといけないんだと。既存のCSSを組み合わせて使う場合それを書き換えないといけないし、プレフィックスつけない場合はbootstrapのクラス名とかぶらないように命名しないといけない。

    他のCSSのライブラリと同時に使ったりすると、命名がかぶったりする問題も発生しがち。そのライブラリもプレフィックスつけろよって話なんですが。

    CSSのクラスはグローバル問題がとにかく辛いです。

    BEM(mindbemding)を使ったモジュール志向なクラス設計

    bem

    3割くらいはこれです。BEMについては、BEMという命名規則とSass 3.3の新しい記法 – アインシュタインの電話番号が詳しいです。

    現在のSassならば、#{&}とかしなくても普通に&で書けます。

    参考:sass 3.3.0.rc.3 から、インターポレーションなしで、「&」を含んだセレクタが作れる!!!!

    このモジュール志向というのが肝で、モジュールそれぞれが単独で動作するようになっています。

    このおかげで使いたいモジュールだけ引っ張ってくることがかなり用意です。

    Bootstrapだと特にnavbarあたりで顕著ですが、コンテキストでクラスの挙動が変わったりします。親要素に.containerがある場合とか。よく言えば気が利いてると思いますが、ゴリゴリカスタマイズしていこうとすると、予想外の事態に陥ったりすることが多かったイメージです。

    最終的に「自分で書いた方が楽じゃね・・・?」という負のループに陥ります。

    Material Design Liteはモジュール志向なのでこの手の問題が少ないです。他のモジュールに依存しないので、その部分だけ理解してればOKというのが非常に心地よいです。短期記憶に負荷をかけずに済みます。

    SMACSSFLOCSSMCSSITCSSなど、最近流行のCSSアーキテクチャーなどにもすんなり取り込みやすいので、HTMLを書くときも一貫性が保ちやすいです。

    その他

    残りの1割くらい。

    • 公式がSass。しかもgulp-sass。
    • アイコンフォントが同梱されず、Google Fontsから取ってこれる。npmからSassで管理するときに便利。
    • JSがjQuery非依存。
    • CSSフレームワークと言うより、HTML/CSS/JSでのコンポーネントセット。読みやすい。

    まとめ

    • プレフィックス付いてるから既存のCSSやオレオレCSSモジュールとクラス名の競合が起きない。
    • モジュール志向なのでCSSアーキテクチャーに取り込みやすい。理解がしやすい。
    • 結果、BootstrapとかFoundationと比較すると、このパーツだけほしいみたいなことが非常にやりやすい。
    • BEM最高。
    • uikitTopcoatのこともたまには思いだそう。
    • inuitcssは結局どうなるんだろう。

    現場からは以上です。

  • WordPressのTracにチケットを投げたら採用されました。

    コードを書くのに疲れたので、何となく縁のなさそうなコードを読んでいたら、バグを見つけました。用意はしてあるけど使われてない関数だったっぽいです。

    調べたら特にチケットも切られてなかったので、パッチ作ってTracに突撃してきました。

    #33254 (Access undefined $current_user in update_option_new_admin_email().) – WordPress Trac

    そしたらなんか採用されたようです。

    VVVを使って宮内さんの言うとおりにやるのがとにかく簡単でした。VVVの起動にどえらい時間がかかるので飯でも食いながら待ってればいいと思いました。

    VVVを使ってWordPress本体のパッチを送る方法

    VVVが起動する時点でgruntは動くのでやらなくても良いですが、仮想マシン内で実行されるので、仮想マシンの外から作業をするなら、node_modulesを削除して作業する環境で

    $ npm install

    してあげないとビルドタスクがこけます。面倒なので仮想マシンの中で全部作業しました。

    あとちゃんとテストはしましょうね。テストだいじ。

    Tracへの突撃方法

    https://make.wordpress.org/core/reports/ へアクセスして Create a Ticket すればまぁ良いんです。難しいことは正直ほとんどないですが、注意点とか。

    類似のチケットがないかちゃんと調べる

    まぁ、どこでもある奴ですね。右上のSearchからGoogleのサイト内検索が出来るので調べる。関数やメソッド名で調べるのが一番手っ取り早いかも。

    知ってる人がどんな感じでチケット書いたのか読む

    とりあえず、Kiteさんとか宮内さんとかがコアにチケット投げてたのでそれを読んで参考に。

    英語が得意じゃなくてもパッチ投げれば意外に何とかなる

    コードレビューしてくれるコアチームの人とかは当然コード読めるので、この規模ならほぼコードで会話出来そうな感じでした。

    正直営業の人にプログラムの説明するよりは1000倍くらい楽だった気がします。

    提案が入ったようなチケットや、かなり議論が必要なものだとちょっと厳しい気はします。

    というざっくりな感じです。

     

    とりあえずこれで4.4が出るまでの間は、クレジットされたでー!って自慢しようかと思います。

    あと、wp-admin/includesの中とか自分に縁のなさそうなところを読んでみると、といろいろ勉強になること多いです。miscって雑多なって意味だってのを初めて知りました。

    確かにレガシーコードも多いけど、それはそれで勉強になること多いんでたまには、みんな読んでみると良いんじゃないですかね。そのついでにパッチを送ればいいなーとか思いました。

  • WordMoveでMySQL5.1なサーバーにデプロイするとなぜかDBがアップロードされない問題

    こないだ発見した問題ですが、WordPress4.2以降、特定のサーバー条件が揃うと、WordMoveデータベースをpushしてもデータベースがインポートされないという状況が発生しました。特にエラーなどは発生しませんでした。

    、WordPress4.2以降、DBの文字コードがutf8mb4に変更されました。ただし、これ全てのWordPressって訳では無くて、動作しているサーバーのMySQLが5.1系等の場合(正確には5.5.3未満)の場合はutf8mb4に対応してないので、utf8のままなんですよね。

    その場合、ローカルで作った環境がMySQL5.5.3以上の場合、データベースのインポートに失敗します。

    解決法

    ローカルのDBの文字コードを片っ端からutf8に戻せば解決します。面倒くさかったので、SQLダンプでエクスポートしてから utf8mb4 から utf8 に一括置換しました。SQLで一発で戻せる方法あれば誰か教えて下さい。WordPressのコアを見れば utf8 から utf8mb4 はやってるはずなのでわかりそうなものだけど。

    ちょっと・・・みたいなサーバーを扱うときはいろいろ要注意ですね。

  • Amimotoに移行しました。

    Amimotoに移行しました。

    やろうやろうと思い続けて早一年。

    ようやく重い腰を上げてAMIMOTOを使いAmazon EC2に移行しました。

    この間のCIのハンズオンでデプロイ用のサーバーを立てていろいろ弄りまくっていたので、そこまでやったならついでにやってしまおうかと。

    とにかく速いですね。正直アクセスもそこまで無いのでHHVMであるコトのメリットはよくわかってませんけど、とりあえず速いです。

    VCCWを使って移行しましたが、ちょっとデータベースの移行が上手いこと行きませんでした。DBの容量が問題だったのかよくわかってないので、ここらへんをしっかり調査できたら、そのうち移行手順まとめたいと思ってます。

    とりあえず、サーバーのユーザー周りを弄ったりする必要はありますね。

    参考:ec2-user ユーザーで網元で作成したインスタンスに(S)FTPクライアントソフトで接続するには? | 超高速 WordPress AMI 網元

    これでおいらも網元機動隊!

  • WordPressのマルチサイトでも手元でPHPUnitを動かす。

    マルチサイト専用のプラグインを作る機会があったのですが、そのときに手元でPHPUnitするときのメモです。

    とりあえず、wp-cliでプラグインのひな形を作ります。

    $wp scaffold plugin hoge

    このままphpunitを実行してもマルチサイトにならないので、以下のようなテストコードを書くと失敗します。

    class SampleMultisiteTest extends WP_UnitTestCase {
        public function test_is_multisite() {
            $this->assertTrue( is_multisite() );
        }
    }

    その場合、phpunit.xmlを以下のように改変します。

    <phpunit
        bootstrap="tests/bootstrap.php"
        backupGlobals="false"
        colors="true"
        convertErrorsToExceptions="true"
        convertNoticesToExceptions="true"
        convertWarningsToExceptions="true"
        >
        <php>
            <const name="WP_TESTS_MULTISITE" value="1" />
        </php>
        <testsuites>
            <testsuite>
                <directory prefix="test-" suffix=".php">./tests/</directory>
            </testsuite>
        </testsuites>
    </phpunit>

    WP_TEST_MULTISITEという値を渡してあげるとマルチサイトとしてテスト用のWordPressがインストールされて動作します。

    https://github.com/torounit/multisite-sample-plugin

    Travis CIだとtravis.yml弄るだけで大丈夫です。Travisすげー。

    追記

    宮内さん

    $ WP_MULTISITE=1 phpunit

    でいけるだろ、と指摘されました。そりゃそうだ。

    シングルサイトでもしっかりテストしなきゃ行けないときはコマンドラインで変数を渡して上げる方が良いですね。

  • WordPress等のCMSがjQuery等を出力するとき、browserifyで上手いことやる。

    最近、jsでrequireが無いと生きれない身体になってしまいました。

    CoffeeScriptから卒業して、ES6でコードを書くようにもしています。ES6のClass構文とかアロー関数が無いと人生辛くなってきました。

    そんなわけで自分はbrowserifyを使ってコードを書いてます。requireを良い感じにコンパイルして1つのファイルにまとめてくれる奴です。

    そんなときに結構困るのがwp_head()や、wp_footer()からscriptタグでjQueryunderscore.jsBackbone.js等の有名処のライブラリが出力される場合があることです。

    functions.phpで無理矢理消しても良いのですがそれは筋が悪そうなので、browserify-shimを使って指定されたライブラリはグローバル変数のものを使うようにします。

    そのコードがこんな感じ。

    gist: https://gist.github.com/torounit/0da591b62d03187b4641

    package.json

    {
      "browserify-shim": {
        "jquery": "global:jQuery",
        "underscore": "global:_",
        "backbone": "global:Backbone"
      },
      "devDependencies": {
        "babelify": "^6.1.3",
        "browserify": "^11.0.0",
        "browserify-shim": "^3.8.10",
        "debowerify": "^1.3.1",
        "gulp": "^3.9.0",
        "gulp-notify": "^2.2.0",
        "vinyl-buffer": "^1.0.0",
        "vinyl-source-stream": "^1.1.0",
        "watchify": "^3.3.0"
      },
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "Toro_Unit",
      "license": "ISC"
    }
    

    gulpfile.js

    'use strict';
    
    // ==================================
    //
    // Config.
    //
    // ==================================
    
    var config = {
        browserify: {
            bundleOption: {
                cache: {}, packageCache: {}, fullPaths: false, //for watchfy.
                debug: true,
                entries: './src/scripts/app.js',
                extensions: ['js', 'jsx'],
            },
            dest: './dist/scripts/',
            filename: 'app.js'
    
        }
    }
    
    // ==================================
    //
    // Load modules.
    //
    // ==================================
    
    var source = require('vinyl-source-stream');
    var browserify = require('browserify');
    var watchify = require('watchify');
    var gulp = require('gulp');
    var notify = require("gulp-notify");
    
    var handleErrors = function() {
        var args = Array.prototype.slice.call(arguments);
        notify.onError({
            title: "Compile Error",
            message: "<%= error.message %>"
        }).apply(this, args);
        this.emit('end');
    };
    
    // ==================================
    //
    // Compile JavaScripts.
    //
    // ==================================
    
    gulp.task('setWatch', function () {
        global.isWatching = true;
    });
    
    gulp.task('browserify', function () {
    
        var b = browserify(config.browserify.bundleOption)
            .transform('babelify')
            .transform("browserify-shim")
            .transform("debowerify");
    
        var bundle = function () {
            b.bundle().on('error', handleErrors)
                .pipe(source(config.browserify.filename))
                .pipe(gulp.dest(config.browserify.dest));
        };
        if (global.isWatching) {
            var bundler = watchify(b);
            bundler.on('update', bundle);
        }
        bundle();
    });
    
    gulp.task('watchify', ['setWatch', 'browserify']);
    

    タスク

    $ gulp browserify //コンパイル
    $ gulp watchify //ファイルの変更を監視して自動コンパイル

    といった格好になります。

    browserify-shim

    browserifyには、transformというAPIがありまして、ここにプラグインを突っ込むことが出来ます。

    アプリケーションコード上のJSから呼び出せるのは通常、node_modulesにインストールされているものか、ファイル名で指定されたJSのみですが、require(‘jquery’) のようなコードを書いたときに、node_modulesではなく、グローバル変数のjQueryを呼んでくることが出来るようになります。

    package.jsonにbrowserify-shimという項目を作ってこんな感じで指定すれば動作します。

    {
      "browserify-shim": {
        "jquery": "global:jQuery",
        "underscore": "global:_",
        "backbone": "global:Backbone"
      }
    }

    debowerify

    debowerifyは、bowerでインストールしたライブラリをrequireやimportできるようにするプラグインです。

    最近オワコンと言われているbowerですが、jQueryプラグインなどをnpmでインストールして持ってくると、そこからnode_modules内のjqueryを取ってきてしまうと言う問題があります。shimの方の設定が悪いのかどうなのか解らないのですが、そんなわけでその手のものは仕方ないのでbowerで持ってきてrequire(import)します。

    npmだけで管理はしたいのでどうにかしたいところです。最悪、jQueryプラグインも普通にscriptタグで読み込ませるコトもたまにやります。

     

    まとめ

    とりあえずこれで、ライブラリの多重インストールを避けつつインストールが出来ます。後はテーマ側で

    $js_path = get_template_directory_uri() . 'dist/scripts/app.js';
    wp_enqueue_script( 'app', $js_path, array( 'underscore', 'jquery' ), '1.0.0', true );
    

    とかやればとりあえずは終了です。

    まぁ、WordPressのunderscore.jsとかBackbone.jsバージョンが古い問題とかもあるんですけどね。。。

     

  • まばたきするCSSわぷーに対抗して本家のわぷーをまばたきさせてみた。

    元ネタ:https://github.com/mismith0227/csswapuu

    Facebook見てたら

    という投稿がありました。
    いや、CSSわぷーの記事は読みましたよ?とりあえずデベロッパーツール立ち上げて、CSS弄ったりしましたよ。ええ。

    でもね、まばたきするなんて気づきませんでした。

    WordPressに対する愛と同じくらいCSSへの愛が深い人間としてはこれは許されないだろうということでとりあえず、まばたきわぷー作りました。

    https://github.com/torounit/wapuu/blob/master/wp_chara.svg

    7割くらい元ネタからのパクリなんですが。

    SVGでもCSSだけで全然アニメーションって作れるもんですね。

     

    作った後に気づいたんですが、今の最新のわぷーはSketchで作られたSVGなんですよね。。。

    https://github.com/jawordpressorg/wapuu/blob/gh-pages/wapuu-original/wapuu-original.svg

    そのうち作り直します。。。。

     

  • WordCamp Kansai 2015 に参加してきました。

    7/25・7/26の二日間、大阪大学で開催されたWordCamp Kansai 2015に参加してきました。

    今年は宮内さんにお誘い頂いて、東京の堀家さん・長崎のキタジマさん・長野のとろゆにという何とも地方色溢れるメンバーでセッションとハンズオンをやらせて頂きました。

    ワタクシはデプロイ先のサーバーの設定と、自分のプラグインの手動テスト時代の闇を熱く語る担当でした。

    ほぼ初対面のメンバーで45分って・・・思ってたんですけど意外に短いもんですね。

    サーバー自体はあと少しの間は立てておくので、ハンズオン参加者の人は遊んでみて下さい。
    ハンズオン出てないよ!って人とか、サーバーつながらないよーって人は、

    あたりを見るといろんなサーバーでも出来るのでやってみて下さい。

    他には、2日目のリアルフォーラムの回答者をやらせて頂きました。凄い人たちばかりだったのでだいたい全部しゃべって頂いたのでほとんど回答してなかった気はしますが、仕事上の立場や規模、地域などもバラバラなのにほとんど結論が変わらないのがおもしろかったです。行き着くところはだいたい一緒なんですかね。

    その他の時間はずーっとコントリビュートスタジオに引きこもっていたのでセッション全然見てないです。後でスライドとか動画を見返したいと思います。

    関西や九州の方々はTwitterやFacebook、Githubやりとりは結構多いのですが、実は話したコト全然無い人たちがたくさん居たのでいろいろ話せたのがとにかく楽しかったです。ネットだと、Contact Form 7の三好さんとWP Multibyte Patchのてんぷらさんの滅茶苦茶濃度の濃い雑談なんて絶対聞けないですし。

    反省とか次回までのTodoとか。

    2日間朝から夜までみたいなのもスピーカーやったのも初めてだったし、いろいろ反省というか。

    飲み過ぎない。

    前日から、2日目の打ち上げまでアホみたいに飲んでました。ずーっと内臓の調子は悪かったような気がします。別に飲まなくても楽しいので、お酒はほどほどにしましょう。

    キタジマさんいろいろごめんなさい。

    あとホテルに戻るときにiPad落として画面割りました。せつないです。

    Tシャツは多めに持っていくor現地調達

    松本市とは湿度がだいぶ違うので、体感温度の差がやばいです。ずーっとサウナに居る気分でした。午前中の時点で汗だくでTシャツが気持ち悪かったです。

    英語のリスニングを勉強する

    WooCommerceの中の人も居て懇親会などでいろいろお話させて頂いたり、プルリクします!みたいな話もさせて貰ったのですが、英語しゃべれたら絶対楽しいと思ったので、英語を聞く耳をちゃんと作ろうと思います。

    感想とか

    とりあえず、YATさんに「ずーっとにこにこしてるねー」って言ってもらえる位楽しんでいたようです。

    地元のビール祭りや学生のイベントに関わらせて頂くことも多いですが、イベントを一から作り上げるって本当にすっごいことだと思います。スタッフの皆さん本当にありがとうございます。

    またそう遠く無いうちに大阪に行くことになりそうなので、直接お礼を言わせて頂ければと思います。ありがとうございました。

     

  • Simple Post Type Permalinks 1.1.0 をリリースしました。

    Simple Post Type Permalinks 1.1.0 をリリースしました。

    Simple Post Type Permalinks をアップデートしました。

    ダウンロードはこちら。https://ja.wordpress.org/plugins/simple-post-type-permalinks/

    • get_post_type_archive_linkをサポート
    • WPMLやWooCommerceとの動作テスト
    • アクションフックやフィルターフックの追加
    • テストコードを追加

    等の変更を行っています。

    プルリクなどお待ちしてますー!

    Github Repository

     

  • PHPのIf文的なものまとめ

    某OSSのソースコードを見てたら、if文の代わりに使っているいろんな記述がありました。知ってないと読めないモノもいろいろあったのでちょっとまとめてみます。

    普通にif文

    if( $condition ) {
        hello();
    }

    とりあえずごくごく普通のやつ。

    if( $condition ) hello();

    括弧を省略すると、if文の次の式が実行される。

    三項演算子

    ( $condition ) ? hello() : null;

    条件を反転するともう少し短くかけます。

    ( !$condition ) ?: hello();

    PHP5.3以降からtrueの時の動作を省略できるようになったようです。

    switch文

    switch文を使ってもif文と同じことが出来ます。

    switch (true) {
        case $condition:
            hello();
            break;
    }

    正直switch文を使うべきケースがよくわかってません。if~elseifで十分だと思う。

    and演算子

    論理演算子の&&や、andを使ってもif文みたいなコトは出来ます。論理積演算子の場合左から順に処理され、falseyな値が出た時点で処理を終了するので、こんな書き方が出来ます。

    $condition && hello();
    $condition and hello();

    まとめ

    普通にif文使えよ!って思いました。可読性を大事にしましょう。