首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将类作为函数参数传递

将类作为函数参数传递
EN

Stack Overflow用户
提问于 2015-09-16 17:09:16
回答 4查看 41.4K关注 0票数 34

我想做这样的事:

代码语言:javascript
复制
function doSomething($param, Class) {
Class::someFunction();
}

$someVar = doSomething($param, Class);

有可能吗?

更好地解释我想做什么。我在Laravel中有一个助手函数来生成唯一的鼻涕虫,所以我必须查询不同的表,这取决于段塞的保存位置。

我试图写的实际代码:

代码语言:javascript
复制
$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;
    }

谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-09-16 17:12:56

您可以使用神奇的::class常量:

代码语言:javascript
复制
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);
票数 50
EN

Stack Overflow用户

发布于 2015-09-16 17:27:45

在PHP中,类(或类名)作为字符串处理。从PHP5.5开始,您可以使用YourClass::class获得一个完全限定的类名。如果您想在php的早期版本中获得它,您可以(如果您已经拥有calss的一个对象),可以执行以下操作:

代码语言:javascript
复制
<?php
$obj = new YourClass();
// some code

$clazz = get_class($obj);
?>

或者,您可以在类中实现静态方法,如下所示:

代码语言:javascript
复制
<?php

class YourClass {
    // some code

    public static function getClassName() {
        return get_called_class();
    }
?>

如果您想将一个类传递给一个函数,您可以这样做:

代码语言:javascript
复制
<?php
function do_somthing($arg1, $clazz) {
    $clazz::someStaticMethod($arg1);
}
?>

代码语言:javascript
复制
<?php
function do_somthing($arg1, $clazz) {
    call_user_func(array($clazz, 'someStaticMethod')), $arg1);
}
?>

如果需要调用该类的非静态方法,则需要实例化它:

代码语言:javascript
复制
<?php
function do_somthing($arg1, $clazz) {
    $obj = new $clazz(); 
    $obj->someNonStaticMethod();
}
?>

注意:您可以使用PHP暗示传递的类名:

代码语言:javascript
复制
<?php
function do_somthing($arg1, MyInterface $clazz) {
    $obj = new $clazz(); 
    $obj->someInterfaceMethod();
}
?>
票数 17
EN

Stack Overflow用户

发布于 2015-09-16 17:16:20

我认为你行。

将类名作为字符串参数发送,然后如下所示使用它。

代码语言:javascript
复制
$classtr = "yourparam";// param comes from the function call.

$obj = new $classtr;
$obj->method();
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32614696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档