<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>@blog.justoneplanet.info &#187; 基本</title>
	<atom:link href="http://blog.justoneplanet.info/category/computer-language/php/basic/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.justoneplanet.info</link>
	<description>日々勉強</description>
	<lastBuildDate>Wed, 08 Feb 2012 02:57:17 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>PHP Functions（PHPの関数）</title>
		<link>http://blog.justoneplanet.info/2009/04/13/php-functions%ef%bc%88php%e3%81%ae%e9%96%a2%e6%95%b0%ef%bc%89/</link>
		<comments>http://blog.justoneplanet.info/2009/04/13/php-functions%ef%bc%88php%e3%81%ae%e9%96%a2%e6%95%b0%ef%bc%89/#comments</comments>
		<pubDate>Mon, 13 Apr 2009 13:49:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[基本]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=635</guid>
		<description><![CDATA[■文法 大文字と小文字は区別されない。functionキーワードの後に関数名が続く。 &#60;?php function func(){ //code } ?&#62; 有効な関数名 ^[a-zA-Z_][a-zA-Z0- [...]]]></description>
			<content:encoded><![CDATA[<h3>■文法</h3>
<p>大文字と小文字は区別されない。functionキーワードの後に関数名が続く。</p>
<pre class="brush: php;">
&lt;?php
function func(){
    //code
}
?&gt;
</pre>
<h4>有効な関数名</h4>
<p>^[a-zA-Z_][a-zA-Z0-9_]$</p>
<p>但し、システムで今後使用される可能性があるため、アンダーバー（アンダースコア）が2つ続いて始まる関数名は極力使用しない方が良い。</p>
<h3>■戻り値（返り値）</h3>
<p>PHPでは、関数は必ず戻り値を発生させる。returnを記述しなかった場合は、nullが戻り値となる。通常はreturnを実行すると、関数は残りの処理を行わない。</p>
<pre class="brush: php;">
&lt;?php
function hello($name){
    return &quot;Hello, &quot; . $name . &quot;!&quot;;
}
$txt = hello('John');
echo $txt;//display : Hello, John!
?&gt;
</pre>
<p>参照で戻り値を渡す為には以下のように記述する。</p>
<pre class="brush: php;">
&lt;?php
function &amp;execute($sql){
    $result = mysql_query($sql);
    return $result;
}
$result = &amp;execute(&quot;SELECT * FROM `table`&quot;);
?&gt;
</pre>
<p>この場合、$resultは関数内部の$resultの参照になる。但し、大きな文字列や配列を戻り値とし、さらにそれを後で変更する場合以外では、参照渡しのコストの方が高くつく。また、この記法を用いる場合、戻り値は必ず発生し、かつ変数でなければならない。</p>
<h3>■Passing Arguments（引数）</h3>
<p>関数の挙動をコントロールするなどの目的で、任意の数の引数を関数に渡せる。</p>
<pre class="brush: php;">
&lt;?php
function hello($name){
    echo &quot;Hello, {$name}.&quot;;
}
hello('John');//Hello, John.
?&gt;
</pre>
<h4>デフォルト値を持った引数を設定</h4>
<p>引数を渡さなかった場合、デフォルト値が適用される。</p>
<pre class="brush: php;">
&lt;?php
function hello($name = 'John'){
    echo &quot;Hello, {$name}.&quot;;
}
hello();//Hello, John.
hello('Nick');//Hello, Nick.
?&gt;
</pre>
<p>デフォルト値を持たないパラメータを全て指定した後に、デフォルト値を持った引数はいくつも指定が可能である。以下の場合、引数$msgは指定しなければならない。また、$name1のみデフォルト値を指定し、$name2だけ任意の値を指定する、といった事は行えない。</p>
<pre class="brush: php;">
&lt;?php
function hello($msg, $name1 = 'John', $name2 = 'Nick'){
    echo &quot;$msg, {$name1} and {$name2}.&quot;;
}
hello('Hello');//Hello, John and Nick.
?&gt;
</pre>
<h4>Passing Arguments by Reference（引数の参照渡し）</h4>
<p>参照渡しの引数を使うと、関数内から関数外の変数の操作が出来る。</p>
<p>メモリを意識して楽しいといえば楽しいのだが、コードの可読性が下がる気がする。理屈だけ覚えて、個人的な範囲で実用は避けようと思う。</p>
<pre class="brush: php;">
&lt;?php
function add(&amp;$a){
    $a++;
    //通常であれば、変数を操作してもスコープが異なるので関数外には影響しない
}
$num = 1;
add($num);
echo $num;//2
//メモリの住所を渡しただけなので、その場所に対して関数内で処理がされる
?&gt;
</pre>
<p>PHP4では出来ないが、PHP5では以下のように参照渡しの引数にもデフォルトの値を設定することができる。</p>
<pre class="brush: php;">
&lt;?php
function add(&amp;$a= 0){
    $a++;
}
add();
?&gt;
</pre>
<h3>■Variable-length Argument Lists（可変引数）</h3>
<pre class="brush: php;">
&lt;?php
function calc(){
    $array = func_get_args();
    $count = func_num_args();
    //$value = func_get_arg((int) $index_number);
    if($count === 0){
        return 0;
    }
    else{
        $answer = 0;
        foreach($array as $key =&gt; $value){
            $answer = $answer + (int) $value;
        }
        return $answer;
    }
}
print(calc(1,5,4,8));//18
?&gt;
</pre>
<div class="kakomi">
<h4>各関数について</h4>
<dl>
<dt>array <strong>func_get_args</strong>(void)</dt>
<dd>関数の引数を配列として返す</dd>
<dt>int <strong>func_num_args</strong>(void)</dt>
<dd>関数の引数の数を返す</dd>
<dt>mixed <strong>func_get_arg</strong>((int) $num)</dt>
<dd>$num番目の引数の値を取得する</dd>
</dl>
</div>
<p>関数で明示した引数がある場合は、func_get_args、func_num_args、func_get_argの各関数にその引数も含まれる。</p>
<p>また可変引数は非常に強力であるが、引数をいくつ受け付けるのかがパッと分からないためにコードが読みづらくなる欠点がある。</p>
<h3>■可変関数</h3>
<p>コードが読みづらくなり滅多に使われることがないが、変数に呼び出し用の括弧をつけて関数とすることもできる。</p>
<pre class="brush: php;">
&lt;?php
function first(){
    print('This is first.');
}
$which = 'first';
$which();//This is first.
?&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2009/04/13/php-functions%ef%bc%88php%e3%81%ae%e9%96%a2%e6%95%b0%ef%bc%89/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP Errors and Error Management（PHPにおけるエラー）</title>
		<link>http://blog.justoneplanet.info/2009/04/12/php-errors-and-error-management%ef%bc%88php%e3%81%ab%e3%81%8a%e3%81%91%e3%82%8b%e3%82%a8%e3%83%a9%e3%83%bc%ef%bc%89/</link>
		<comments>http://blog.justoneplanet.info/2009/04/12/php-errors-and-error-management%ef%bc%88php%e3%81%ab%e3%81%8a%e3%81%91%e3%82%8b%e3%82%a8%e3%83%a9%e3%83%bc%ef%bc%89/#comments</comments>
		<pubDate>Sun, 12 Apr 2009 13:20:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[基本]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=606</guid>
		<description><![CDATA[■エラーの種類 Compile-time errors コンパイル中にパーサーに感知されたエラー。 Fatal errors スクリプトの実行をとめる停止するエラー。 Recoverable errors(>=PHP5. [...]]]></description>
			<content:encoded><![CDATA[<h3>■エラーの種類</h3>
<h4>Compile-time errors</h4>
<p>コンパイル中にパーサーに感知されたエラー。</p>
<h4>Fatal errors</h4>
<p>スクリプトの実行をとめる停止するエラー。</p>
<h4>Recoverable errors(>=PHP5.2.0)</h4>
<p>ユーザー定義のエラーハンドラで処理が可能。</p>
<h4>Warning</h4>
<p>致命的ではないエラー。関数に渡す引数を間違えた場合などに起こり、スクリプトの実行は止まらない。</p>
<h4>Notice</h4>
<p>通常の実行時に起こりうる注意。初期化していない変数にアクセスしようとした場合などに発生し、スクリプトの実行は止まらない。</p>
<h3>■エラーレベルを表す定数</h3>
<p>固有のビット値を持っている。</p>
<dl>
<dt>E_ERROR</dt>
<dd>実行時エラー</dd>
<dt>E_WARNING</dt>
<dd>実行時の警告</dd>
<dt>E_PARSE</dt>
<dd>パースエラー</dd>
<dt>E_NOTICE</dt>
<dd>実行時の注意</dd>
<dt>E_STRICT</dt>
<dd>コードの互換性上の注意（PHP5.0.0以降）</dd>
<dt>E_RECOVERABLE_ERROR</dt>
<dd>E_ERRORと同レベル</dd>
<dt>E_ALL</dt>
<dd>E_STRICT以外の全て</dd>
</dl>
<h3>■エラーの表示</h3>
<p>php.iniのいくつかのディレクティブで定義できるが、デバッグなどで一時的にエラーを表示させたい時は、error_reporting関数をスクリプトの先頭などに記述する。</p>
<pre class="brush: php;">
&lt;?php
error_reporting(E_ALL ^ E_NOTICE);//PHPのデフォルトのエラー表示
ini_set('display_errors', 1);//エラーを表示しない設定にしている場合は左記も追記する
?&gt;
</pre>
<h3>■エラーハンドラ</h3>
<p>通常、エラーは関数に$errNo（エラーレベル）, $errStr（エラーメッセージ）, $errFile（エラーが発生したファイル名）, $errLine（行番号）, $errContext（エラーが発生したスコープ内での全変数の配列）を渡す。ユーザー定義関数がfalseを返した場合は、通常のエラーハンドラが処理を引き継ぐ。</p>
<pre class="brush: php;">
&lt;?php
$oldEh = '';
function MyEh($errNo, $errStr, $errFile, $errLine, $errContext){
    global = $oldEh;
    logToFile(&quot;Error: $errStr in $errFile as line $errLine&quot;);
    if($oldEh){
        $oldEh($errNo, $errStr, $errFile, $errLine, $errContext);
    }
}
$oldEh = set_error_handler('MyEh');
?&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2009/04/12/php-errors-and-error-management%ef%bc%88php%e3%81%ab%e3%81%8a%e3%81%91%e3%82%8b%e3%82%a8%e3%83%a9%e3%83%bc%ef%bc%89/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP Iterative Constructs（繰り返し制御）</title>
		<link>http://blog.justoneplanet.info/2009/04/12/php-iterative-constructs%ef%bc%88%e7%b9%b0%e3%82%8a%e8%bf%94%e3%81%97%e5%88%b6%e5%be%a1%e6%96%87%ef%bc%89/</link>
		<comments>http://blog.justoneplanet.info/2009/04/12/php-iterative-constructs%ef%bc%88%e7%b9%b0%e3%82%8a%e8%bf%94%e3%81%97%e5%88%b6%e5%be%a1%e6%96%87%ef%bc%89/#comments</comments>
		<pubDate>Sat, 11 Apr 2009 20:09:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[基本]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=587</guid>
		<description><![CDATA[■while &#60;?php $counter = 0; while($counter &#60; 4){ //code $counter++; } ?&#62; よくあるファイル操作だと以下のような形式かな。 &#60;? [...]]]></description>
			<content:encoded><![CDATA[<h3>■while</h3>
<pre class="brush: php;">
&lt;?php
$counter = 0;
while($counter &lt; 4){
    //code
    $counter++;
}
?&gt;
</pre>
<p>よくあるファイル操作だと以下のような形式かな。</p>
<pre class="brush: php;">
&lt;?php
$txt = '';
$fh = fopen('samle.txt', 'r');
while($row = fgets($fh)){
    $txt .= $row;
}
fclose($fh);
?&gt;
</pre>
<h4>do&#8230;while</h4>
<p>知ってはいるけど使わないってのはコレ。通常のwhile文との違いは、条件が常にfalseの場合でも、必ず1回実行される事にある。</p>
<pre class="brush: php;">
&lt;?php
$counter = 0;
do{
    //code
}while($counter &lt; 4);
?&gt;
</pre>
<h3>■for</h3>
<p>for(カウンターの初期化用の式、条件式、カウンターの増減の式)となる。</p>
<p>PHPを勉強したての頃は、JavaScriptの影響もあって多用しました。</p>
<pre class="brush: php;">
&lt;?php
$ary = array('a', 'b', 'c');
for($i = 0; $i &lt; count($ary); $i++){
    //code
    echo PHP_EOL;
}
?&gt;
</pre>
<h3>■foreach</h3>
<p>PHPで便利なループコントロールの1つ。<a href="https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Global_Objects/Array/ForEach">JavaScriptのforEachではネイティブで実装されていないブラウザの事を配慮</a>しなくてはならないが、PHPならそんな事はない。</p>
<pre class="brush: php;">
&lt;?php
$ary = array();
foreach($ary as $value){
    //code
}
?&gt;
</pre>
<p>配列のキーを使用したいときには</p>
<pre class="brush: php;">
&lt;?php
$ary = array();
foreach($ary as $key =&gt; $value){
    //code
}
?&gt;
</pre>
<h3>■break</h3>
<p>最も内側のループを抜ける。以下の例では、任意の$sの値に対して、$tは0,1,2の時だけ//codeが実行される。$tが3になった時、breakが実行され内側のループから抜ける。</p>
<pre class="brush: php;">
&lt;?php
$a = array();
$b = array();
for($s = 0; $s &lt; count($a); $s++){
    for($t = 0; $t &lt; count($b); $t++){
        if($t === 3){
            break;
        }
        //code
    }
}
?&gt;
</pre>
<h3>■continue</h3>
<p>ループの処理をスキップする。以下の例だと$iが3の時に//codeは実行されないが、ループ自体の処理は続く。</p>
<pre class="brush: php;">
$ary = array();
for($i = 0; $i &lt; count($ary); $i++){
    if($i === 3){
        continue;
    }
    //code
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2009/04/12/php-iterative-constructs%ef%bc%88%e7%b9%b0%e3%82%8a%e8%bf%94%e3%81%97%e5%88%b6%e5%be%a1%e6%96%87%ef%bc%89/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP Conditional Structures（条件）</title>
		<link>http://blog.justoneplanet.info/2009/04/12/php-conditional-structures%ef%bc%88%e6%9d%a1%e4%bb%b6%e6%96%87%ef%bc%89/</link>
		<comments>http://blog.justoneplanet.info/2009/04/12/php-conditional-structures%ef%bc%88%e6%9d%a1%e4%bb%b6%e6%96%87%ef%bc%89/#comments</comments>
		<pubDate>Sat, 11 Apr 2009 17:38:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[基本]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=582</guid>
		<description><![CDATA[■if 一般的な例 &#60;?php $flag = true; if($flag){ //execute } else{ //code } ?&#62; PHPにはループや条件分岐の際のブロックを表現する方法にコロンが用 [...]]]></description>
			<content:encoded><![CDATA[<h3>■if</h3>
<p>一般的な例</p>
<pre class="brush: php;">
&lt;?php
$flag = true;
if($flag){
    //execute
}
else{
    //code
}
?&gt;
</pre>
<p>PHPにはループや条件分岐の際のブロックを表現する方法にコロンが用意されている。その場合はendifを使用しブロックの最後を明示してあげる。個人的にはトリッキーに見えるので使わないが、WordPressのテンプレートなどでは使われている。</p>
<pre class="brush: php;">
&lt;?php if($flag): ?&gt;
&lt;p&gt;This is a pen.&lt;/p&gt;
&lt;?php else: ?&gt;
&lt;p&gt;This is a book.&lt;/p&gt;
&lt;?php endif; ?&gt;
</pre>
<h3>■三項演算子</h3>
<p>トリッキーに見えたりもするが、スッキリ見えたりもする。すなわち、使用の可否のボーダーが曖昧で難しいというように思える。</p>
<pre class="brush: php;">
&lt;?php
$flag = true;
$str = ($flag)? 'yes' : 'no';
?&gt;
</pre>
<h3>■switch</h3>
<p>個人的にはあまり使わない方だが便利っちゃ便利。</p>
<p>以下の例では、$xを1回だけ評価し、その値のcase文から実行する。break文を書かない場合、全てのコードが実行される。「break文を書かない」というのは文法（syntax）エラーではないがコードが非常に見にくくなるので、あえてbreakは書いた方がイイと思う。</p>
<pre class="brush: php;">
&lt;?php
$x = 0;
switch($x){
    case 0:
        //code
        break;
    case 1:
        //code
        break;
    case 2:
        //code
        break;
    default:
        //code
}
?&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2009/04/12/php-conditional-structures%ef%bc%88%e6%9d%a1%e4%bb%b6%e6%96%87%ef%bc%89/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP Operators（演算子）</title>
		<link>http://blog.justoneplanet.info/2009/04/06/php-operators%ef%bc%88%e6%bc%94%e7%ae%97%e5%ad%90%ef%bc%89/</link>
		<comments>http://blog.justoneplanet.info/2009/04/06/php-operators%ef%bc%88%e6%bc%94%e7%ae%97%e5%ad%90%ef%bc%89/#comments</comments>
		<pubDate>Mon, 06 Apr 2009 14:05:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[基本]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=546</guid>
		<description><![CDATA[■Arithmetic Operators（算術演算子） 特に変わったところはない。余りは繰り返しをコントロールする際に有用だったりする &#60;?php //加算 $a = 5 + 2.3; //減算 $a = 8 - [...]]]></description>
			<content:encoded><![CDATA[<h3>■Arithmetic Operators（算術演算子）</h3>
<p>特に変わったところはない。余りは繰り返しをコントロールする際に有用だったりする</p>
<pre class="brush: php;">
&lt;?php
//加算
$a = 5 + 2.3;
//減算
$a = 8 - 2;
//乗算
$a = 7 * 5;
//除算
$a = 8 / 2;
//剰余
$a = 21 % 8;
?&gt;
</pre>
<h3>■Incrementing or Decrementing Operators（インクリメント演算子、デクリメント演算子）</h3>
<p>演算子の位置が後ろの場合は値を返してから、加減の処理が行われる。この演算子は<br />
戒めとして使わないプログラマーもいるようだ</p>
<pre class="brush: php;">
&lt;?php
$x = 1;
echo $x++;//output 1
echo ++$x;//output 3
echo --$x;//output 2
echo $x--;//output 2
?&gt;
</pre>
<h3>■The String Concatenation Operator（文字列結合演算子）</h3>
<p>必要に応じてオペランドが文字列に変換される</p>
<pre class="brush: php;">
&lt;?php
$str = 'Hello ' . 'World';
echo $str;// Hello World
$str .= ', John';
echo $str;// Hello World, John
?&gt;
</pre>
<h3>■Bitwise Operators（ビット演算子）</h3>
<p>滅多に使用しないと思われがちだが、PHPの関数の引数では頻繁に使用されるので、必ず覚えておかなければならない。</p>
<dl>
<dt>&#038;</dt>
<dd>Bitwise AND。両方とも「1」だった場合は結果におけるそのビットが「1」になる。それ以外は「0」となる。</dd>
<dt>|</dt>
<dd>Bitwise OR。両方とも「0」だった場合は結果におけるそのビットが「0」になる。それ以外は「1」となる。</dd>
<dt>^</dt>
<dd>Bitwise XOR。組み合わせが「0」と「1」だった場合にけっかにおけるそのビットが「1」になる。両方のビットが等しい場合は「0」となる。</dd>
</dl>
<pre class="brush: php;">
&lt;?php
print(5 &amp; 6);//101 &amp; 110 =&gt; 100(4)
print(4 | 6);//100 | 110 =&gt; 110(6)
print(5 ^ 6);//101 ^ 110 =&gt; 011(3)
?&gt;
</pre>
<dl>
<dt>~</dt>
<dd>ビット否定演算子･･･2進表現にした後で、0を1、1を0に変換する</dd>
</dl>
<pre class="brush: php;">
&lt;?php
$x = 0;
echo ~$x;//output -1
?&gt;
</pre>
<h3>■Bitwise Left / Right Shift</h3>
<p>$x自身は変化しないことに注意しなくてはならない。基本的には2進数に変換し、各ビットを演算子が示す方向にシフトする。</p>
<pre class="brush: php;">
&lt;?php
$x = 1;
echo $x &lt;&lt; 1;//output 2
echo $x &lt;&lt; 3;//output 8
$a = 16;
echo $a &gt;&gt; 1;//output 8
echo $a &gt;&gt; 2;//output 4
?&gt;
</pre>
<h3>■Assignment Operators（代入演算子）</h3>
<p>変数に値を代入する働きをする</p>
<pre class="brush: php;">
&lt;?php
$str = 'Hello World';

$x = 1;
$x += 5;
print($x);// output 6
?&gt;
</pre>
<h3>■Referencing Variables（参照）</h3>
<p>オブジェクトを除く全てのデータ型は「&#038;」を使わない限り、コピーとして値が渡される</p>
<pre class="brush: php;">
&lt;?php
$dog = 'Jack';
$cat = &amp;$dog;
print($cat);//Jack
$cat = 'Emily';
print($dog);//Emily
?&gt;
</pre>
<h3>■Comparison Operators（比較演算子）</h3>
<p>PHPは動的型付･･･。但し、この変換のパターンを覚えるのは非常にやっかいであるので、「===」や「!==」を使うことをお勧めする</p>
<pre class="brush: php;">
$a = '1';
$b = 1;
if($a == $b){
    //execute
}
if($a === $b){
    //not execute
}
if($a != $b){
    //not execute
}
if($a !== $b){
    //execute
}
</pre>
<dl>
<dt>A &gt; B, A &gt;= B</dt>
<dd>AはBより大きい、AはB以上</dd>
<dt>A &lt; B, A &lt;= B</dt>
<dd>AはBより小さい、AはB以下</dd>
</dl>
<h3>■Logical Operators（論理演算子）</h3>
<pre class="brush: php;">
$a = true;
$b = false;
//AND Operator（論理積演算子）
if($a &amp;&amp; $b){
    //not execute
}
//OR Operator（論理和演算子）
if($a || $b){
    //execute
}
//XOR Operator（排他的論理和演算子）
if($a XOR $b){
    //execute
}
//論理否定演算子
$a = !$a;
</pre>
<h3>■Cast Operators（キャスト演算子）</h3>
<p>オペランドを特定の型に変換</p>
<pre class="brush: php;">
$a = '7';
$b = (int) $a;

class Animal {
    $name = 'Pochi';
    $type = 'dog';
}
$animal = new Animal();
$a = (array) $animal;
print_r($a);
/**
 * array
 * [name] =&gt; Pochi
 * [type] =&gt; dog
 */

$b = array('name' =&gt; 'Pochi', 'type' =&gt; 'dog');
$c = (object) $b;
print($c-&gt;name);//Pochi
</pre>
<p>オブジェクトを配列にキャストすると、プロパティと値を関連付けた配列になる。配列をオブジェクトにキャストすると、配列のキーがオブジェクトのプロパティ名に、値がプロパティの値になる</p>
<h3>■3項演算子</h3>
<p>この演算子も好き嫌いがわかれるかもしれない。この演算子を上手く使うと、コードがスッキリとし見やすくなることもある。但し、逆に見にくくなることもある。個人の好き嫌いと扱いの技量が影響する非常に奥の深い演算子だと個人的には思う</p>
<pre class="brush: php;">
&lt;?php
$a = true;
$b = false;
$name = ($a &amp;&amp; $b)? 'John' : 'Jack';
print($name);//Jack
?&gt;
</pre>
<h3>■エラー抑制演算子</h3>
<p>特定の関数などにおけるエラーの発生を抑制する</p>
<pre class="brush: php;">
&lt;?php
$dat = @simplexml_load_string($str);
?&gt;
</pre>
<h3>■実行演算子</h3>
<p>バッククォーテーションを使うと、OSに直接コマンドを渡せる。コレは非常に強力な機能だがOSコマンドインジェクションなどのセキュリティホールにも繋がる。個人的には可能な限り使わないでおきたいところだ</p>
<pre class="brush: php;">
&lt;?php
$directory = `ls`;
print($directory);
?&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2009/04/06/php-operators%ef%bc%88%e6%bc%94%e7%ae%97%e5%ad%90%ef%bc%89/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP Variable Scopes（変数のスコープ）</title>
		<link>http://blog.justoneplanet.info/2009/04/05/php-variable-scopes%ef%bc%88%e5%a4%89%e6%95%b0%e3%81%ae%e3%82%b9%e3%82%b3%e3%83%bc%e3%83%97%ef%bc%89/</link>
		<comments>http://blog.justoneplanet.info/2009/04/05/php-variable-scopes%ef%bc%88%e5%a4%89%e6%95%b0%e3%81%ae%e3%82%b9%e3%82%b3%e3%83%bc%e3%83%97%ef%bc%89/#comments</comments>
		<pubDate>Sun, 05 Apr 2009 02:07:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[基本]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=537</guid>
		<description><![CDATA[■ローカルスコープ &#60;?php $counter = 10; function getVal(){ $counter = 0; //code } ?&#62; 関数外で$counterが10であっても、関数内の$co [...]]]></description>
			<content:encoded><![CDATA[<h3>■ローカルスコープ</h3>
<pre class="brush: php;">
&lt;?php
$counter = 10;
function getVal(){
    $counter = 0;
    //code
}
?&gt;
</pre>
<p>関数外で$counterが10であっても、関数内の$counterには影響しない</p>
<h3>■グローバルスコープ</h3>
<pre class="brush: php;">
&lt;?php
$counter = 10;
function getVal(){
    global $counter = 0;
    //code
}
getVal();
?&gt;
</pre>
<p>globalキーワードをつけると関数内でもグローバル変数になる。もしくは、スーパーグローバル変数の$_GLOBALSを使う</p>
<h3>■スタティック変数</h3>
<pre class="brush: php;">
&lt;?php
function getVal(){
    static $counter = 0;
    $counter++;
    //code
}
getVal();
?&gt;
</pre>
<p>関数が実行し終わっても、残り続ける。上の例だと関数が呼び出されるごとに0、1、2、･･･となる。関数外とは別個に存在できる。</p>
<h3>■関数の引数</h3>
<pre class="brush: php;">
&lt;?php
function printVal($str){
    $str = 'Hello World, ' . $str;
    print($str);
}
?&gt;
</pre>
<p>基本的には関数内のみ有効。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2009/04/05/php-variable-scopes%ef%bc%88%e5%a4%89%e6%95%b0%e3%81%ae%e3%82%b9%e3%82%b3%e3%83%bc%e3%83%97%ef%bc%89/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP Variables and Constants（変数と定数）</title>
		<link>http://blog.justoneplanet.info/2009/04/05/php-variables-and-constants%ef%bc%88%e5%a4%89%e6%95%b0%e3%81%a8%e5%ae%9a%e6%95%b0%ef%bc%89/</link>
		<comments>http://blog.justoneplanet.info/2009/04/05/php-variables-and-constants%ef%bc%88%e5%a4%89%e6%95%b0%e3%81%a8%e5%ae%9a%e6%95%b0%ef%bc%89/#comments</comments>
		<pubDate>Sat, 04 Apr 2009 18:08:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[基本]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=528</guid>
		<description><![CDATA[PHPにおいては変数宣言構文が存在しない。変数は値が代入された時点で作成される ■変数名 ^[a-zA-Z_][a-zA-Z0-9_]*こんな感じ。つまり変数名の先頭に数字は使えない。そして、頭には「$」をつけること！  [...]]]></description>
			<content:encoded><![CDATA[<p>PHPにおいては変数宣言構文が存在しない。変数は値が代入された時点で作成される</p>
<h3>■変数名</h3>
<p>^[a-zA-Z_][a-zA-Z0-9_]*こんな感じ。つまり変数名の先頭に数字は使えない。そして、頭には「$」をつけること！</p>
<p>大文字と小文字は区別される。</p>
<h3>■可変変数</h3>
<p>これは強力だが、コードが読みづらく非常に危険な気もする。個人的には敢えて使わないでおこう。</p>
<pre class="brush: php;">
&lt;?php
$name = 'foo';
$$name = 'bar';
print($foo);//bar

$name = '123';
$$name = '456';
print(${'123'});//456

function myFunc(){
    //code
}
$f = 'myFunc';
$f();
?&gt;
</pre>
<h3>■変数が存在しているかを確認</h3>
<p>言語機構のisset()を使う。</p>
<pre class="brush: php;">
&lt;?php
if(isset($val)){
    //code
}
?&gt;
</pre>
<p>isset()は変数が存在し、nullでない時にtrueを返す。従って以下のようなコードで問題が起こる可能性がある。このような問題を防ぐ為には、アルゴリズムを見直すか、is_nullを使う。</p>
<pre class="brush: php;">
$tmpAry = array(1 =&gt; null, 2 =&gt; 'sample');
foreach($tmpAry as $key =&gt; $value){
    if(isset($value)/* || is_null($value)*/){
        //code
    }
}
</pre>
<p>また、以下のようにキーを使用して変数のテストをする方法も考えられる。</p>
<pre class="brush: php;">
$tmpAry = array(1 =&gt; null, 2 =&gt; 'sample');
foreach($tmpAry as $key =&gt; $value){
    if(array_key_exixts($key, $tmpAry)){
        //code
    }
}
</pre>
<div class="kakomi">
<h4>各関数について</h4>
<dl>
<dt>bool <strong>isset</strong>(mixed $var)</dt>
<dd>変数がセットされているかどうかを返す。実際には関数ではなく言語構造である。</dd>
</dl>
</div>
<h3>■参照</h3>
<p>変数のクローンは作成されず、メモリ上の住所（参照）が格納される</p>
<pre class="brush: php;">
&lt;?php
$dog = 'Jack';
$cat = &amp;$dog;
print($cat);//Jack
$cat = 'Emily';
print($dog);//Emily
?&gt;
</pre>
<h3>■定数</h3>
<ul>
<li>値はスカラー値（論理値、整数、浮動小数点数、文字列）</li>
<li>一度値を設定したら、後から変更することは出来ない</li>
<li>全てのスコープから参照できる</li>
<li>定数名は^[a-zA-Z_][a-zA-Z0-9_]*こんな感じ。但し、慣例として大文字が用いられることが多い</li>
<li>大文字と小文字は区別される</li>
</ul>
<pre class="brush: php;">
&lt;?php
define('EMAIL', 'sample@sample.com');
echo EMAIL;//sample@sample.com
?&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2009/04/05/php-variables-and-constants%ef%bc%88%e5%a4%89%e6%95%b0%e3%81%a8%e5%ae%9a%e6%95%b0%ef%bc%89/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP Data Types（データ型：複合）</title>
		<link>http://blog.justoneplanet.info/2009/04/05/php-data-types%ef%bc%88%e3%83%87%e3%83%bc%e3%82%bf%e5%9e%8b%ef%bc%9a%e8%a4%87%e5%90%88%ef%bc%89/</link>
		<comments>http://blog.justoneplanet.info/2009/04/05/php-data-types%ef%bc%88%e3%83%87%e3%83%bc%e3%82%bf%e5%9e%8b%ef%bc%9a%e8%a4%87%e5%90%88%ef%bc%89/#comments</comments>
		<pubDate>Sat, 04 Apr 2009 17:32:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[基本]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=516</guid>
		<description><![CDATA[■array（配列） いくつかのデータにキーを振って、まとめて管理する。 &#60;?php $ary[0] = 'dog'; $ary[1] = 'cat'; $ary[2] = 'fish'; ?&#62; ■objec [...]]]></description>
			<content:encoded><![CDATA[<h3>■array（配列）</h3>
<p>いくつかのデータにキーを振って、まとめて管理する。</p>
<pre class="brush: php;">
&lt;?php
$ary[0] = 'dog';
$ary[1] = 'cat';
$ary[2] = 'fish';
?&gt;
</pre>
<h3>■object（オブジェクト）</h3>
<p>任意のデータと処理をまとめたもの。</p>
<pre class="brush: php;">
&lt;?php
class Sample {
    private $val;
    public static function setVal($val){
        //code
    }
}
$obj = new Sample();
?&gt;
</pre>
<h3>■その他のデータ型</h3>
<h4>null</h4>
<p>変数に値が何も代入されていない事を示す</p>
<h4>Resource</h4>
<p>外部とのやり取り用の識別子</p>
<pre class="brush: php;">
&lt;?php
$txt = '';
$fh = fopen('sample.txt', 'r');
while($row = fgets($fh,0)){
   $txt .= $row;
}
fclose($fh);
$dbh = mysql_connect(DB_HOST, DB_USER, DB_PASS);
?&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2009/04/05/php-data-types%ef%bc%88%e3%83%87%e3%83%bc%e3%82%bf%e5%9e%8b%ef%bc%9a%e8%a4%87%e5%90%88%ef%bc%89/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP Data Types（データ型：スカラー）</title>
		<link>http://blog.justoneplanet.info/2009/04/05/php-data-types%ef%bc%88%e3%83%87%e3%83%bc%e3%82%bf%e5%9e%8b%ef%bc%9a%e3%82%b9%e3%82%ab%e3%83%a9%e3%83%bc%ef%bc%89/</link>
		<comments>http://blog.justoneplanet.info/2009/04/05/php-data-types%ef%bc%88%e3%83%87%e3%83%bc%e3%82%bf%e5%9e%8b%ef%bc%9a%e3%82%b9%e3%82%ab%e3%83%a9%e3%83%bc%ef%bc%89/#comments</comments>
		<pubDate>Sat, 04 Apr 2009 16:38:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[基本]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=505</guid>
		<description><![CDATA[■boolean（論理値） ※小文字が一般的!? true false PHPでfalseとみなされるのは以下の通り 整数値0 浮動小数点値0.0 空の文字列 文字列&#8217;0&#8242; 要素数0の配列 空のオ [...]]]></description>
			<content:encoded><![CDATA[<h3>■boolean（論理値）</h3>
<p>※小文字が一般的!?</p>
<ul>
<li>true</li>
<li>false</li>
</ul>
<p>PHPでfalseとみなされるのは以下の通り</p>
<ul>
<li>整数値0</li>
<li>浮動小数点値0.0</li>
<li>空の文字列</li>
<li>文字列&#8217;0&#8242;</li>
<li>要素数0の配列</li>
<li>空のオブジェクト</li>
<li>NULL</li>
</ul>
<p>但し、複雑な型変換を覚えるのはいささか面倒なので、以下のような型変換が起こらないコードを書く癖を付けた方が良い。</p>
<pre class="brush: php;">
if($bool === true){
    //code
}
</pre>
<h3>■int（整数値）</h3>
<p>-2^32~2^32-1を範囲とするがプラットフォームによって異なる。正確には、使用したCコンパイラのlong型と等しくなる。</p>
<h4>表記法</h4>
<dl>
<dt>10進法</dt>
<dd>一般的な十進数表記</dd>
<dt>8進法</dt>
<dd>0を頭につけなければならない</dd>
<dt>16進法</dt>
<dd>0xを頭につけなければならない</dd>
</dl>
<h3>■float（浮動小数値）</h3>
<p>1.7E-308~1.7E+308を範囲とするがプラットフォームによって異なる。精度は15桁。使用したCコンパイラのdouble型と等しくなる。</p>
<h4>表記法</h4>
<dl>
<dt>通常の記法</dt>
<dd>0.87,18.257</dd>
<dt>指数表記</dt>
<dd>2E7,1.2e2</dd>
</dl>
<p>注意点としては、近似値である事を常に考慮しなくてはならない。以下のコードを実行すると</p>
<pre class="brush: php;">
&lt;?php
print((0.1 + 0.7) * 10);
?&gt;
</pre>
<p>8が表示されるように思えるかもしれないが、実際には7.999999が表示される。計算の精度を上げる必要がある場合は、BCMathなどの拡張モジュールを使用する。また数値は予想される値が入っている事を期待してはならない。</p>
<h3>■Strings（文字列）</h3>
<p>正しくはバイナリデータの集合</p>
<h4>リテラル</h4>
<pre class="brush: php;">
$str = 'Hello World';
print(&quot;$str, John!&quot;);//Hello World, John!が表示される
print('$str, John!');//$str, John!が表示される
</pre>
<h3>■型変換について</h3>
<p>以下のように、型を強制的に変換することができる</p>
<pre class="brush: php;">
&lt;?php
$x = 3.14;
print((int) $x);//3
?&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2009/04/05/php-data-types%ef%bc%88%e3%83%87%e3%83%bc%e3%82%bf%e5%9e%8b%ef%bc%9a%e3%82%b9%e3%82%ab%e3%83%a9%e3%83%bc%ef%bc%89/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP Comments, Whitespace and Language Constructs</title>
		<link>http://blog.justoneplanet.info/2009/04/05/php-comments-whitespace-and-language-constructs/</link>
		<comments>http://blog.justoneplanet.info/2009/04/05/php-comments-whitespace-and-language-constructs/#comments</comments>
		<pubDate>Sat, 04 Apr 2009 16:01:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[基本]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=491</guid>
		<description><![CDATA[■コメント Single line commentは改行コードや終了タグまでがコメントとなる //この一行はコメント #この一行はコメント /*コメントの始まり コメントの内容 コメントの終わり*/ //使用例 /**  [...]]]></description>
			<content:encoded><![CDATA[<h3>■コメント</h3>
<p>Single line commentは改行コードや終了タグまでがコメントとなる</p>
<pre class="brush: php;">
//この一行はコメント
#この一行はコメント

/*コメントの始まり
コメントの内容
コメントの終わり*/

//使用例
/**
 * get the value
 * @param string $str
 * @return (array) $ary
 */
function getVal($str){
     //code
    return $ary;
}
</pre>
<h3>■スペース</h3>
<p>使えない場所</p>
<ul>
<li>開始タグや終了タグの間</li>
<li>whileやfor、foreachなどキーワードの間</li>
<li>変数名や関数名の間</li>
</ul>
<p>それ以外は使える。</p>
<h3>■言語機構（言語構造）</h3>
<pre class="brush: php;">
echo 'Hello World';//「Hello World」と表示される
</pre>
<p>echoは関数のように見えるが、実際には関数ではなく、値も返さない。値を返して欲しい場合はprintを使う（printは常に1を値として返す言語構造の一種である）。</p>
<h4>スクリプトを終了させたい時は</h4>
<pre class="brush: php;">
die('status');
</pre>
<pre class="brush: php;">
exit('status');
</pre>
<p>上述の2つの言語機構の違いは殆どない。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2009/04/05/php-comments-whitespace-and-language-constructs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP Tags</title>
		<link>http://blog.justoneplanet.info/2009/04/05/php-tags/</link>
		<comments>http://blog.justoneplanet.info/2009/04/05/php-tags/#comments</comments>
		<pubDate>Sat, 04 Apr 2009 15:28:42 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[基本]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=485</guid>
		<description><![CDATA[PHPを書くときにほぼ間違いなく書く事になる開始タグと終了タグを紹介。 ■Standard Tags 最も一般的で、PHPの設定ファイルが変わっても使える &#60;?php //code ?&#62; ■Short Tag [...]]]></description>
			<content:encoded><![CDATA[<p>PHPを書くときにほぼ間違いなく書く事になる開始タグと終了タグを紹介。</p>
<h3>■Standard Tags</h3>
<p>最も一般的で、PHPの設定ファイルが変わっても使える</p>
<pre class="brush: php;">
&lt;?php
//code
?&gt;
</pre>
<h3>■Short Tags(SGML形式)</h3>
<p>一昔前はメジャーだったが、XMLの処理命令と被ってしまう欠点がある。</p>
<pre class="brush: php;">
&lt;?
//code
?&gt;
&lt;?= $val ?&gt;
</pre>
<h3>■Script Tags</h3>
<pre class="brush: php;">
&lt;script language=&quot;php&quot;&gt;
//code
&lt;/script&gt;
</pre>
<h3>■ASP Tags</h3>
<pre class="brush: php;">
&lt;%
//code
%&gt;
</pre>
<h3>■結論</h3>
<p>1番はじめのStandard Tagsを使おう。他のタグはphp.iniで無効に出来るのでコードの配布を考えるならば尚更である</p>
<h3>■おまけ</h3>
<p>終了タグ直後の改行コードはパーサーによって削除される。テキスト出力を前提としていないファイルのインクルードもある事を考えると整合性が気になる。コレに対する最も良い方法は終了タグを書かない事である。そういえばsymfonyのコーディング規約とか･･･</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2009/04/05/php-tags/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

