为了账号安全,请及时绑定邮箱和手机立即绑定

从函数内部访问 PHP 对象

从函数内部访问 PHP 对象

PHP
冉冉说 2022-07-02 16:57:00
我创建了一个 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();}是否可以只创建一次对象,然后在每个函数中重用它?现在,我在每个函数中创建对象,这不是一个好习惯。
查看完整描述

2 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

我将假设您的实际功能比您发布的功能更多,否则您实际上并不需要功能并且可以简单地执行此操作:


$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);


查看完整回答
反对 回复 2022-07-02
?
守着一只汪

TA贡献1872条经验 获得超4个赞

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


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();

}


查看完整回答
反对 回复 2022-07-02
  • 2 回答
  • 0 关注
  • 210 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号