◆ func_num_args() で引数の数を取得できる
 ◆ JavaScript の arguments.length みたいなもの
 ◆ デフォルト引数あっても渡した時の数を取得できる 
◆ ...$args でまとめて受け取ったり 配列を展開して渡したりできる

php で関数を呼び出すときは JavaScript と違って 引数の数が足りていないとダメです
多すぎるなら問題なしです
function fn($a){
return isset($a) ? "1": "2";
}
fn();
PHP warning: Missing argument 1 for fn()

となります

引数が渡されたかどうかで分岐したいときは デフォルト引数をつかって省略可能にします
function fn($a = null){
return $a === null ? "1" : "2";
}
fn(); // 1
fn(null); // 1

ですが これだと 引数に null が渡されたのと区別できないです
null が渡されたのと 引数無しでも区別したいなら
function fn($a = null){
return func_num_args() === 0 ? "1" : "2";
}
fn(); // 1
fn(null); // 2

となります
func_num_args() で引数の数を取得できます
デフォルト引数で代入されても関係なく本来の渡された数になります

JavaScript の
function fn(){
return arguments.length === 0 ? "1" : "2"
}

と同じです

ただ func_num_args() って関数名覚えられないんですよね
毎回ググってます
なので 別の方法
function fn(...$args){
return count($args) === 0 ? "1" : "2";
}
fn(); // 1
fn(null); // 2

...$args と書くと可変引数を配列として $args で受け取ることができます
さっき知りました

JavaScript の ES6 と同じですね
function fn(...args){
return args.length === 0 ? "1" : "2"
}

受け取りだけじゃなくて実行するときの ... もあります
function fn(...$args){
return count($args) === 0 ? "1" : "2";
}
fn(...[]); // 1
fn(...[null]); // 2
fn(...[1,2]); // 2

こういうことです
この例見ると 分割して渡して 受け取るときにまたまとめるのなら最初から配列のままで渡せよ って思いますが気にしないでください


徐々に PHP も使いやすくなってきてますね
あとは 関数と無名関数の違いをなくして use なしのレキシカルスコープになるといいなー