php - 如何/在哪里在 PHP 中两次声明一个静态函数?
问题描述
我在 Symfony 中有两个课程:
<?php
namespace App\MiniEntities;
class Address {
// ...
static function load(Redis $r, string $address) {
return jsonOrFalseFromRedis($r, "addr:" . $address);
}
}
和
<?php
namespace App\MiniEntities;
class Name {
// ...
static function load(Redis $r, string $address) {
return jsonOrFalseFromRedis($r, "addr:" . $address);
}
}
他们都使用jsonOrFalseFromRedis
功能。
我知道我可以做一个父类并将函数放在那里,但是我想将它保留为正常函数。
但是我不能这样做,目前我用静态方法做了另一个类似 Java 的类jsonOrFalseFromRedis
。
到目前为止我尝试了什么:
我做了一个名为 help.php 的文件并做了require_once "help.php";
,但是它给了我以下错误:
Compile Error: Cannot redeclare App\MiniEntities\jsonOrFalseFromRedis() (previously declared in /www/sites/btc_pay/src/MiniEntities/help.php:9)
更新
我是这样做的:
姓名:
<?php
namespace App\MiniEntities;
class Name {
// ...
static function load(Redis $r, string $address) {
return jsonOrFalseFromRedis($r, "addr:" . $address);
}
}
require_once "help.php";
帮助.php:
<?php
namespace App\MiniEntities;
function jsonOrFalseFromRedis(Redis $r, $key) {
$json = $r->get($key);
if ($json)
return json_decode($json, true);
return false;
}
解决方案
使用静态方法或过程函数是违反 OOP 模式的。
您应该在 services.yml 中将帮助程序和其他类定义为服务
App\MiniEntities\Helper:
class: 'App\MiniEntities\Helper'
App\MiniEntities\Address:
class: 'App\MiniEntities\Address'
arguments:
$helper: '@App\MiniEntities\Helper'
然后使用 DI 将你的助手注入到类中
class Address
{
private $helper;
public function __construct(Helper $helper)
{
$this->helper = $helper;
}
public function load(Redis $r, string $address)
{
return $this->helper->jsonOrFalseFromRedis($r, "addr:" . $address);
}
}
推荐阅读
- ruby-on-rails - RSpec 中的匹配器 `validate_length_of` 应该使用改革形式
- javascript - 如何修复“删除突出显示不是功能”?
- javascript - 带有双 & 符号的 "if" 简写
- javascript - 如何在方法中使用的 vue apollo 查询中重新获取/更新结果
- c++ - “使用未声明的标识符‘IntQueue’”,即使它已定义
- python-3.x - 在 Python 中为每个帧中的多个圆圈设置动画
- openvino - 删除推理图
- lua - 为什么在这个 Lua 5.1 __gc 解决方法中将 userdata 对象添加到表中?
- c++11 - 使用 RegNotifyChangeKeyValue 进行注册表监控
- java - 获取用户在休眠环境中所做的所有更改