从函数内部访问PHP对象

问题描述 投票:-1回答:2

我已经创建了一个PHP类,我想从另一个文件中的函数访问其方法。下面是我的代码:

include_once PLUGIN_DIR_PATH."/classes/Brands.php";

function create_tables(){

$brand_obj = new Brands;    
$brand_obj->create_brand_table();           
}

function delete_tables() {

$brand_obj = new Brands;    
$brand_obj->delete_brand_table();
}

是否可以仅创建一次对象,然后在每个函数中重用它?现在,我在每个函数中都创建对象,这不是一个好习惯。

php class oop object
2个回答
0
投票

您可以使用全局关键字来使用在函数内部的函数外部创建的变量:

global $object

代码示例:

include_once PLUGIN_DIR_PATH."/classes/Brands.php";

$brand_obj = new Brands;

function create_tables(){

    global $brand_obj;
    $brand_obj->create_brand_table();
}

function delete_tables() {

   global $brand_obj;
   $brand_obj->delete_brand_table();
}

0
投票

我将假定您的实际功能比您发布的功能要多,否则,您实际上并不需要功能,只需执行以下操作:

$brand_obj = new Brands;    
$brand_obj->create_brand_table();            
$brand_obj->delete_brand_table();

否则,您可以创建一个类,并通过其构造函数将Brands依赖项注入其属性之一:

class TablesManager
{
  private $brands;

  public function __construct(Brands $brands)
  {
    $this->brands = $brands;
  }

  public function create_tables(): void
  {
    $this->brands->create_brand_table();
  }

  public function delete_tables(): void
  {
    $this->brands->delete_brand_table();
  }
}

用法:

$brands = new Brands();
$tables_manager = new TablesManager($brands);
$tables_manager->create_tables();
$tables_manager->delete_tables();

注意:调用类SomethingManager有时被认为是不好的做法/表示该类做了太多事情。考虑(至少)为您的需求提供一个更准确的名称。

演示:https://3v4l.org/iTmY6

非OOP替代项

function create_tables(Brands $brand_obj): void { 
  $brand_obj->create_brand_table();           
}

function delete_tables(Brands $brand_obj): void {
  $brand_obj->delete_brand_table();
}

$brand_obj = new Brands();    
create_tables($brand_obj);
delete_tables($brand_obj);
© www.soinside.com 2019 - 2024. All rights reserved.