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

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

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

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

Q&A

解決済

3回答

1106閲覧

URLからのGET引数パラメータととPHP代入コードを混同した記述の結果が不思議

ohesotori

総合スコア150

PHP

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

1グッド

0クリップ

投稿2016/11/17 13:39

編集2016/11/17 13:50

PHP 5.5.9-1ubuntu4.20 (cli)です。

<?php $a='test1'; $b='test2'; $sp[]=$a&$sp[]=$b; var_dump($sp);

として、結果が

array(2) { [0]=> string(5) "test2" [1]=> string(5) "test0" }

となります。すごく気持ち悪いのですがなぜこうなるのでしょう。

↓こちらの質問の回答を見ながら不思議に思ってこちらの質問を立てました。
https://teratail.com/questions/55568

kaz.Suenaga👍を押しています

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

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

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

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

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

guest

回答3

0

ベストアンサー

$sp[]=$a&$sp[]=$b;

は、つまりこういうこと

$sp[]=($a&($sp[]=$b));

少しわかりやすくするとこうですから

$a='test1'; $b='test2'; $c=($sp[]=$b); $sp[]=($a&$c);

$sp[0]には最初に$b・・・test2が設定され、
$cには同様にtest2が入ります
$a&$cは文字列同士のビット積ですから
同じ部分はその文字、違う部分は0が返ります。
testまで一緒で1と2が違うので1と2の積=0よってtest0です
(ちょこっと書き足しました)

投稿2016/11/17 13:59

編集2016/11/17 14:29
yambejp

総合スコア114775

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

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

ohesotori

2016/11/17 14:05

最もわかりやすく書いていただけたので、こちらをベストアンサーにさせてください。 ありがとうございました。
ohesotori

2016/11/17 14:50

補足ありがとうございます :)
guest

0

$sp[]=$a&$sp[]=$b;

は、

PHP

1$sp[]=$b; 2$sp[]=$a & $b;

と同じです。
また、"test1" & "test2"は、"test0"になります。
参考:PHP: ビット演算子 - Manual

&、| そして ^ 演算子の左右のオペランドが文字列の場合、その演算は、 文字列を構成する文字の ASCII 値を使って行います。

投稿2016/11/17 13:55

otn

総合スコア84499

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

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

ohesotori

2016/11/17 14:04

URL目に慣れると、順番を見間違いますね。よくわかりました。ありがとうございます。
guest

0

ビット演算されているのでは。

PHP

1<?php 2$a='test1'; 3$b='test2'; 4$sp[]=$a&$b; // 文字列 &演算子 文字列 5sp[]=$b; 6var_dump($sp);

【PHP: ビット演算子 - Manual】
http://php.net/manual/ja/language.operators.bitwise.php

&、| そして ^ 演算子の左右のオペランドが文字列の場合、その演算は、 文字列を構成する文字の ASCII 値を使って行います。その結果は文字列になります。

投稿2016/11/17 13:56

kei344

総合スコア69400

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

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

ohesotori

2016/11/17 14:07

ビット演算ですね。 |(or)にすると、'test3' になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問