私はこのようなことをしようとしています:
function doSomething($param, Class) {
Class::someFunction();
}
$someVar = doSomething($param, Class);
出来ますか?
私がやろうとしていることをより良く説明するために。 Laravelにヘルパー関数があり、一意のスラッグを生成するため、スラッグの保存場所に応じて異なるテーブルをクエリする必要があります。
私が書いている実際のコード:
$newcat->slug = $helper->uniqueSlug($appname, Apk);
public function uniqueSlug($str, Apk)
{
$slug = Str::slug($str);
$count = Apk::whereRaw("slug RLIKE '^{$slug}(-[0-9]+)?$'")->count();
return $count ? "{$slug}-{$count}" : $slug;
}
ありがとう!
マジック::class
定数を使用できます:
public function uniqueSlug($str, $model)
{
$slug = Str::slug($str);
$count = $model::whereRaw("slug RLIKE '^{$slug}(-[0-9]+)?$'")->count();
return $count ? "{$slug}-{$count}" : $slug;
}
$newcat->slug = $helper->uniqueSlug($appname, Apk::class);
PHPでは、クラス(またはクラス名)は文字列として処理されます。 PHP 5.5以降、YourClass::class
完全修飾クラス名を取得します。以前のバージョンのphpで取得したい場合、次のいずれかを実行できます(既にcalssのオブジェクトがある場合)。
<?php
$obj = new YourClass();
// some code
$clazz = get_class($obj);
?>
または、次のようにクラスに静的メソッドを実装できます。
<?php
class YourClass {
// some code
public static function getClassName() {
return get_called_class();
}
?>
クラスを関数に渡したい場合は、次のようにできます。
<?php
function do_somthing($arg1, $clazz) {
$clazz::someStaticMethod($arg1);
}
?>
または
<?php
function do_somthing($arg1, $clazz) {
call_user_func(array($clazz, 'someStaticMethod')), $arg1);
}
?>
そのクラスの非静的メソッドを呼び出す必要がある場合は、インスタンス化する必要があります。
<?php
function do_somthing($arg1, $clazz) {
$obj = new $clazz();
$obj->someNonStaticMethod();
}
?>
注: PHP渡されたクラス名でタイプヒンティングを使用できます。
<?php
function do_somthing($arg1, MyInterface $clazz) {
$obj = new $clazz();
$obj->someInterfaceMethod();
}
?>
できると思う。
クラス名を文字列パラメーターとして送信し、以下のように使用します。
$classtr = "yourparam";// param comes from the function call.
$obj = new $classtr;
$obj->method();
名前空間を使用する必要がある文字列パラメーターとしてクラス名を送信します。例えば:
function defineClass()
{
$class = "App\MyClass"; // mention the namespace too
}
function reciveClass($class)
{
$class:: // what do you need,
}