LoginSignup
6
5

More than 5 years have passed since last update.

PHPでハマりそうなとこTips その1

Last updated at Posted at 2016-01-19

requireの/はどれだけあってもいい。

PHPの仕様というより、OSの仕様らしい。

test.php

test.php
<?php

require_once './/////////////////include.php';

include.php

include.php
<?php

echo 'hoge';

実行結果

$ php test.php
hoge

メソッドの引数が少ないのはダメだが、多い分には問題無い

引数が少ない場合

<?php

function say($hoge) {
    echo $hoge . PHP_EOL;
}

say();
$ php test.php

Warning: Missing argument 1 for say(), ...

引数が多い場合

<?php

function say($hoge) {
    echo $hoge . PHP_EOL;
}

say('fizz', 'buzz');
$ php test.php
fizz

配列のインデックスと配列の順番は関係無い

配列には順番があるが、それは配列のインデックス(キー)とは別の概念である。他の言語をやっているとハマる。

勘違いしそうな例1

<?php

$array = [];
$array[0] = 0;
$array[4] = 4;
$array[2] = 2;
$array[3] = 3;
$array[1] = 1;
var_dump($array);

// 配列の3番目以降を切り出す
$sliced_array = array_slice($array, 3);
var_dump($sliced_array);
$ php test.php
array(5) {
  [0]=>
  int(0)
  [4]=>
  int(4)
  [2]=>
  int(2)
  [3]=>
  int(3)
  [1]=>
  int(1)
}
array(2) {
  [0]=>
  int(3)
  [1]=>
  int(1)
}
// [3, 4] が取り出されるわけではない
// インデックスも張り替えられる

インデックスではなく、配列に入れた順番で後ろの二つが切り出される。

勘違いしそうな例2

<?php

$array1 = [];
$array1[0] = 0;
$array1[4] = 4;
$array1[2] = 2;
$array1[3] = 3;
$array1[1] = 1;

$array2 = [];
$array2[0] = 0;
$array2[1] = 1;
$array2[2] = 2;
$array2[3] = 3;
$array2[4] = 4;

var_dump($array1 === $array1);
var_dump($array1 === $array2);
$ php test.php
bool(true)  // 同じ配列を比較しているので当然true
bool(false) // キー => 値 の組み合わせが同じでも順番が違うのでfalse

str_replace の第一引数の配列を渡した時の処理順について

var_dump(str_replace(["\t", "\n", "\r\n", "\r"], " ", "\r\n"));
var_dump(str_replace(["\t", "\r\n", "\n", "\r"], " ", "\r\n"));
string(2) "  "
string(1) " "

どういうことかというと、

str_replace($array, $after, $str) {
    foreach($array as $before) {
        str_replace($before, $after,$str);
    }
}

みたいな感じになっていると思われる。

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5