我想做这样的事:
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;
}谢谢!
发布于 2015-09-16 17:12:56
您可以使用神奇的::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);发布于 2015-09-16 17:27:45
在PHP中,类(或类名)作为字符串处理。从PHP5.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();
}
?>发布于 2015-09-16 17:16:20
我认为你行。
将类名作为字符串参数发送,然后如下所示使用它。
$classtr = "yourparam";// param comes from the function call.
$obj = new $classtr;
$obj->method();https://stackoverflow.com/questions/32614696
复制相似问题