文字列操作って色々あるけどどうなの?

2014年11月5日(水)
原田 裕介(はらだゆうすけ)
基本的な機能として、特に意識せずに使っている文字列操作。 似た機能の違いを理解して使い分けるのがポイントです。

こんにちは。3回目となる今回は、文字列操作についてお話ししていきます。非常に身近で簡単に使っていますが、細かく見ていくと結構奥深いのが、この文字列操作です。

PHP技術者認定試験の上級では、こういった言語仕様の細部にも突っ込んでくることがありますので、少し詳しく見ていきましょう。

(クリックで拡大)

echoとprint

まずはPHPで文字列を出力する際に使われるechoとprintです。この2つは全く同じ動作をするように見えますが、何か違いがあるのでしょうか?私の感覚だとPHPからプログラミングを始めた方はecho、他の言語から入って来た方はprintを使う傾向があるように思います。

echoもprintも関数のように使われていますが、実はrequireやexitと同様に言語構造です。言語構造とはあらかじめ組み込まれているキーワードのことで、一見関数のようですが、使い方が関数とは異なっています。両者の違いとしてはprintは関数のように使用できますが、echoはそのような使い方ができません。「関数のように使用できない」というのは、以下のような書き方ができないということです。

3_1.php

<?php
$string ? echo $string : echo null;

上記のサンプルは、実行しようするとエラーになります。

出力結果

>php 3_1.php
Parse error: syntax error, unexpected T_ECHO in D:\xampp\htdocs\test\php_col\3_1.php on line 5

どうしてもechoを使いたければ、以下のように書けば良いだけですが…

echo $string ? $string : null;

一方printであれば、以下のような書き方ができます。

$string ? print $string : print null;

関数のように使えるprintは、常に1を戻り値として返します(3_2_print_re.php)。echoは戻り値を返さないため、同じような記述をするとエラーになります(3_2_echo_re.php)。

3_2_print_re.php

<?php
$result = print 'Hello World!';
print $result;

出力結果

>php 3_2_print_re.php
Hello World!1

3_2_echo_re.php

<?php
$result = echo 'Hello World!';
echo $result;

result

>php 3_2_echo_re.php
Parse error: syntax error, unexpected T_ECHO in D:\xampp\htdocs\test\php_col\3_4_echo_re.php on line 3

では、色々な書き方を試してみましょう。以下のようなシンプルな書き方は、echo、printのいずれでも可能です。

3_3_echo.php

<?php
echo 'Hello World!';

出力結果

>php 3_3_echo.php
Hello World!

3_3_print.php

<?php
print 'Hello World!';

出力結果

>php 3_3_print.php
Hello World!

カッコ付きの表記も可能です(3_4_echo.php、3_4_print.php)。

3_4_echo.php

<?php
echo('Hello World!');

出力結果

>php 3_4_echo.php
Hello World!

3_4_print.php

<?php
print('Hello World!');

出力結果

>php 3_4_print.php
Hello World!

これに対して、複数の引数を指定する場合は出力に差が生じます。echoはカンマで複数の引数を指定できますが、printではできません(3_5_echo.php、3_5_print.php)。

3_5_echo.php

<?php
$ab = true;
echo 'Hello World!', 123, $ab;

出力結果

>php 3_5_echo.php
Hello World!1231

3_5_print.php

<?php
$ab = true;
print 'Hello World!', 123, $ab;

出力結果

>php 3_5_print.php

Parse error: syntax error, unexpected ',' in D:\xampp\htdocs\test\php_col\3_4_print.php on line 4

また関数のように使えると言っても、echo、printのいずれも可変関数としては使えません。

3_6_echo.php

<?php
$testFunction = 'echo';
$testFunction('Hello World!');

出力結果

>php 3_6_echo.php

Fatal error: Call to undefined function echo() in D:\xampp\htdocs\test\php_col \3_6_echo.php on line 4

3_6_print.php

<?php
$testFunction = 'print';
$testFunction('Hello World!');

result

>php 3_6_print.php

Fatal error: Call to undefined function print() in D:\xampp\htdocs\test\php_col\3_6_print.php on line 4

以上の結果を関数ごとにまとめると、以下の表のようになります。

図2:echoとprintの違い(クリックで拡大)

著者
原田 裕介(はらだゆうすけ)
株式会社ユーザーローカル
東京都在住。携帯のホームページ作成サービスでHTMLのコーディングを始めて、PHPerとなる。
株式会社ハッシュシステム代表取締役やtetolの立ち上げ、株式会社イードでニュースメディアの開発やエンジニア採用を経て、現在はアクセス解析ツールの開発を行いながら、個人でもWEBサービスの開発を行っている。PHP技術者認定上級試験の認定者でもあり、受賞歴はmixi scrap challenge優勝など。

 

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています