我有一个只有一个函数的类:
<?php
class EventLog
{
public function logEvent($data, $object, $operation, $id)
{
//Log it to a file...
$currentTime = new DateTime();
$time = $currentTime->format('Y-m-d H:i:s');
$logFile = "/.../event_log.txt";
$message = "Hello world";
//Send the data to a file...
file_put_contents($logFile, $message, FILE_APPEND);
}
}
然后我有另一个具有许多功能的类,每个人都需要调用上面的方法。要在我完成的每个函数中实例化该类:
$log = new EventLog();
//Then...
$log->logEvent($data, $object, $operation, $id);
问题:我在每个函数中都使用了上面的代码,我想知道的是,如果有一种方法可以为需要它的所有函数实例化一次EventLog类。
答案 0 :(得分:1)
您可以在脚本的开头(例如)创建单个实例,并将其注入需要它的类的构造函数中。这称为依赖注入。大多数PHP Web框架都使用这一原则。
f = lambda x: 'feature' + str(x + 1)
df = df.join(df.pop('features').str.split(',', expand=True).iloc[:, :3].rename(columns=f))
print (df)
name feature1 feature2 feature3
0 Python p1 p2 p3
1 Java j1 j2 j3
2 C++ c1 c2 c3
答案 1 :(得分:0)
您也可以尝试使用PHP Trait(使用命名空间):
<?php
namespace App\Traits;
trait EventLog
{
public function logEvent($data, $object, $operation, $id)
{
//Log it to a file...
$currentTime = new DateTime();
$time = $currentTime->format('Y-m-d H:i:s');
$logFile = "/.../event_log.txt";
$message = "Hello world";
//Send the data to a file...
file_put_contents($logFile, $message, FILE_APPEND);
}
}
在你的其他班级:
<?php
namespace App;
// import your trait here
use App\Traits\EventLog;
class OtherClass
{
use EventLog;
public function sample() {
// sample call to log event
$this->logEvent($data, $object, $operation, $id);
}
}