请告诉我什么是PHP语法:

echo Html::{'div.my-class#my-id'}('This is element content')

?

来自https://github.com/decodelabs/tagged图书馆.

我的意思是我知道它的作用,但我不明白所使用的语法以及它的工作原理:)(紧随作用域操作符后面的括号).看起来他们正在使用大括号来"生成"要调用的函数的名称,但另一方面,它包含像"这样的字符.'和'#'以及变量参数(' my-class ','和'以及变量参数(' my-class ',' my-id ').我糊涂了

推荐答案

让我们从第一原则重建它

  1. 您可以使用{value}来放置动态方法/属性名称

即如果您有

class Dog {
    public string $name = 'doggy';
    public function walk() {
    }
}

你可以做

$dog = new Dog();
$dog->walk(); 
$dog->{'walk'}(); // equivalent 

echo $dog->name;
echo $dog->{'name'};

as 你可以做 this and 'walk' and name are value, they can also come from variables

$attribute = 'name';
$dog->{$attribute};
  1. PHP有一些神奇的方法来处理未定义的方法/属性,完整列表有https://www.php.net/manual/en/language.oop5.overloading.php

例如,每当您调用名称未定义的静态方法时,都会调用__callStatic()

这样

class Html
{
    static public function __callStatic($name, $arguments)
    {
        // Note: value of $name is case sensitive.
        echo "Calling object method '$name' "
             . implode(', ', $arguments). "\n";
    }
    
};

Html::iDontExist();

将输出Calling object method 'iDontExist'

  1. 现在如果我们混合1和2,我们就可以做到
Html::{"Hello world"};

它将输出Calling object method 'Hello World'

结论

  1. 使用{}个语法,您可以拥有不遵循正常惯例的方法(即它们可以具有空间、表情符号、特殊字符等)
  2. 使用像__callStatic这样的重载神奇方法,您可以拥有以前不存在的方法

因此,通过组合1和2,您的库允许一个方法本身已经是一个参数,并且处理这个名称的所有逻辑都将在__callSatic

因此,如果某个东西是已定义的静态方法,则与执行Html::something('div.my-class#my-id', 'This is element content' )相同

Php相关问答推荐

仅在WooCommerce管理订单视图上显示订单项自定义元数据

基于不用于变体的产品属性隐藏多个WooCommerce发货方式

Laravel POST方法返回状态:POST方法上不允许使用405方法

使注册字段UserMeta值对于WooCommerce中的每个用户是唯一的

如何在execute语句中使用存储过程参数?

PHP文件上载问题-";Move_Uploaded_Files";未按预期工作

如何在微软图形API中使用用户S访问令牌或基于租户ID的访问令牌?

在WooCommerce上设置简单和可变产品的最小订单量

在WooCommerce管理中为订单项目添加自定义字段价格值

获取作者';在WordPress中使用PHP

Shopware 6插件:由于删除了配置密钥,更新后配置值不正确

使用 php Carbon 获取两个日期之间的随机日期和时间

将自定义字段添加到管理产品 在 WooCommerce 3.2+ 中批量编辑

对产品/库存结果集进行分组和计数,形成多维分层数组

WooCommerce:如果订单总数为零,则隐藏本地取货运输选项

如何在 PHP laravel 中将图像的透明背景转换为白色?

PHP 中的curl -F request=@file.xml

仅在管理员新订单通知中显示WooCommerce订单商品自定义元数据

php如何删除括号内的百分比值

Shopware 6:无法在新的自定义插件中保存关联字段(媒体)