PHP に組み込み関数のセーフ版を提供するライブラリがあるみたい
見かけた PHP のコードに Safe 版関数を使っているものがありました
使っているライブラリはこれのようです
https://github.com/thecodingmachine/safe

Safe 版ってなにしてるの?
文字数が長すぎるとか引数チェックをして脆弱性の対処をこのレイヤーでやってくれるの?
とか思っていたら単にエラーの場合に throw してくれるだけのようです

中身を見ても単純なものです

json_encode
https://github.com/thecodingmachine/safe/blob/v2.4.0/generated/json.php#L50

mkdir
https://github.com/thecodingmachine/safe/blob/v2.4.0/generated/filesystem.php#L1221

PHP の組み込み関数は例外を起こさず false を返して失敗を伝えるのが多いですからね

昔はその仕様に不満を感じて例外を投げてくれればいいのにと思ったこともあります
でも最近は逆で例外を投げられると catch が面倒なので return として成功と失敗を返してほしいと思ってます

JavaScript だと PHP と違いエラーが throw されるので自分でラップしてエラーでも return するようにしたりしてたりします
非同期関数だと 「.catch(error => null)」 とか 「.catch(error => ({ error }))」 で済むのに同期関数は try-catch 句が必要で const と相性が悪くてイライラしたり……

言語によっては例外というものがなく 成功/失敗という型の中に結果や原因を保持してそれを return するものもありますし PHP のこれはこれでいいものだと思います
例外が起きても ちゃんと作るなら生のエラーメッセージをそのまま使わずユーザーが見れる形のメッセージに置き換えたりといった処理が必要で catch して書き換えて 再 throw したりするなら throw はユーザーがするものとしてライブラリレイヤーでは想定されたエラーでは例外は起こさないのほうがいいのかなと思ったりです
throw の仕方いろいろ
◯ 詳細なし

単純に Error のインスタンスを作って throw

throw new Error("aa")

◯ assign

エラー処理などに使う補足のデータを含めたいとき
プロパティとして Error オブジェクトに追加する 

throw Object.assign(new Error("aa"), { detail: "xxxx" })

◯ object

Error オブジェクトと補足情報を別々にもつオブジェクトを throw する
throw 対象は Error オブジェクトじゃなくてもいい

throw { error: new Error("aa"), detail: "xxxx" }

◯ custom error type

ちゃんとした作りにするなら Error を継承したそれ用の型を作るのがたぶん適切
異なる型なので特別なプロパティを持ってそうということが伝わるし instanceof で種別判定もできる

class AaError extends Error {
constructor(message, detail) {
super(message)
this.detail = detail
}
}

throw new AaError("aa", "xxxx")

◯ no error object

Error オブジェクトは特に必須じゃない
スタックトレースが要らないなら省いてもいい

throw { error: "aa", detail: "aa-error" }