鶏口牛後な日々 〜へっぽこPHPエンジニアの発散の記録〜

PHPエンジニアを目指して奮闘中、でもブログは発散中

phpエラー集

スポンサーリンク
広告

ArgumentCountError: Too few arguments to function <ファンクション名> 0 passed and exactly 1 expected

これは、「引数、つまりfunction()のこのカッコ内に書くものが、足りませんよ〜」というエラー。
function(引数A, 引数B)と書いているのに、引数Aしか渡していなかったら、「もう一個引数くれないとfunctionを動作させることができないよぉ〜」と言ってきているということですね。
phpユニットで、テストが通らず毎回このエラーが出たのですが、オチは、@dataProviderのアノテーションを書く時、大文字のPと書くべきところを小文字で書いていた、ということでした。

BadMethodCallException: Call to undefined method <メソッド名>

おなじみ。だいぶ慣れてきました。
こちらは、「こんなメソッド知らないよ〜」というエラーですね。
別クラスに書かれているメソッドであれば、'use'してあげる必要があるかもしれません。
また、スペルミス、ということもままあります。

Error: Call to a member function <ファンクション名> on null

ファンクションが呼ぼうとしている引数がnullでした、というエラーです。
$<変数名>->toArray() としていた時にこのエラーが出た時は、
toArray()が変形しようとしている、$変数に何も入っていなかった、というのがオチでした。

Error: Call to a member function toArray() on array

上のやつと似てますね。
今回は、toArray()(オブジェクトを配列にする)という関数なのに、toArray()を作用させようとしているものがすでにArrayだぜ、というエラーのようでした。
(追記:要確認)

Error: Call to a member function array_only() on array

$this->user->toArray()->array_only(['<変数名1>', '<変数名2>']); みたいな書き方をしたら出ました。
そもそも、Laravelのヘルパ関数array_only()の使い方は、
$array = array_only($array, ['変数名1', '変数名2'])
みたいに書くべきなので、書き方が間違った時に出るエラーなのかな
(エラーの中身がまだよくわかっていない、検証中)

ErrorException: Undefined variable: <変数名>

これは言わずと知れた、何かのメソッド等で使おうとしている変数が、それ以前に定義されていません、というエラーです。

Undefined Offset

これは、配列で存在しない位置のインデックスを参照した時に発生します。
例えば、要素が4つしかないのに、5つ目を出力させようとした時など。

Cannot declare class <クラス名>, because the name is already in use

これは、あまり調べても大して明快な回答を書いているページがないあたり、とっても基本的なんだろうなと思うのですが、
namespaceの綴りが間違っているということが多いようです。
私も、それでした。最後のsがなかった、とか。

Non-static method <クラス名>:<メソッド名> should not be called statically

staticというプロパティが付いているメソッドは、他のプログラムから、インスタンスを生成せずに呼び出せます。
そのためには呼び出したいクラスのファイルで、
public static function () { } とstaticプロパティをつけてあげないといけません。
このstaticが付いていないメソッドを、静的に(=インスタンスを生成せずに)呼び出そうとすると、「なによ、staticが付いてないじゃないのヨォ」と文句が飛ぶわけです。

Allowed memory size of 134217728 bytes exhausted

これ、検索すると、phpが使えるメモリ量を設定で変える(ini_set('memory_limit', '-1');)というソリューションが結構書かれています。
でも、騙されちゃいけないらしいです。
私も、かろうじて、「え、ほんとに? そんなメモリすぐ大きくしちゃっていいの??」と疑問を持って調べてみたところ、やっぱり「違うよ!! みんなそれ間違い!」と言っているサイトやStackoverflowの記事を見つけました。
ソースのどこかにバグがあって、それのためにphpが使える全てのメモリを費やすほどまでやっちゃっているということらしいのです。
つまり、ここでメモリの量を増やしちゃダメで、やるべきかバグ探しなのでした。
案の定、探してみたら、値を受け取れなかった配列についてforeachしちゃってました。


以上。