Ale*_*lex 19 php laravel laravel-5 laravel-5.1
我正在尝试做这样的事情:
function doSomething($param, Class) {
Class::someFunction();
}
$someVar = doSomething($param, Class);
Run Code Online (Sandbox Code Playgroud)
可能吗?
更好地解释我正在尝试做什么.我在Laravel中有一个辅助函数来生成独特的slug,因此我必须根据slug的保存位置查询不同的表.
我想写的实际代码:
$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;
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
Jos*_*ber 29
你可以使用魔法::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);
Run Code Online (Sandbox Code Playgroud)
小智 11
在PHP中,类(或类名)作为字符串处理.从PHP 5.5开始,您可以使用YourClass::class
获取完全限定的类名.如果你想在早期版本的php中获取它,你可以(如果你已经有一个calss的对象)执行以下操作:
<?php
$obj = new YourClass();
// some code
$clazz = get_class($obj);
?>
Run Code Online (Sandbox Code Playgroud)
或者,您可以在类中实现静态方法,如下所示:
<?php
class YourClass {
// some code
public static function getClassName() {
return get_called_class();
}
?>
Run Code Online (Sandbox Code Playgroud)
如果要将类传递给函数,可以这样做:
<?php
function do_somthing($arg1, $clazz) {
$clazz::someStaticMethod($arg1);
}
?>
Run Code Online (Sandbox Code Playgroud)
要么
<?php
function do_somthing($arg1, $clazz) {
call_user_func(array($clazz, 'someStaticMethod')), $arg1);
}
?>
Run Code Online (Sandbox Code Playgroud)
如果需要调用该类的非静态方法,则需要对其进行实例化:
<?php
function do_somthing($arg1, $clazz) {
$obj = new $clazz();
$obj->someNonStaticMethod();
}
?>
Run Code Online (Sandbox Code Playgroud)
注意:您可以对传递的类名使用PHP类型提示:
<?php
function do_somthing($arg1, MyInterface $clazz) {
$obj = new $clazz();
$obj->someInterfaceMethod();
}
?>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
20644 次 |
最近记录: |