加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

从不同(包含)文件设置的PHP类私有变量

发布时间:2020-12-13 17:24:34 所属栏目:PHP教程 来源:网络整理
导读:我有一个使用私有变量的类,那些变量是“配置变量”,我需要它们有时“改变”(在我的例子中,如果我添加新语言,我需要在配置中也使用新语言,它是CodeIgniter的i18n库. 我需要从数据库中设置$languages和$special. class MY_Lang extends CI_Lang { // languages
我有一个使用私有变量的类,那些变量是“配置变量”,我需要它们有时“改变”(在我的例子中,如果我添加新语言,我需要在配置中也使用新语言,它是CodeIgniter的i18n库.

我需要从数据库中设置$languages和$special.

class MY_Lang extends CI_Lang {
  // languages
  private $languages = array(
    'en' => 'english','sk' => 'slovak','fr' => 'french','nl' => 'dutch'
  );

  // special URIs (not localized)
  private $special = array (
    "admin","link"
  );
.
.
.
  function MY_Lang()
  {
    parent::__construct();
.
.
.

我的想法是我生成一个文件并将其包含在库中.

如下:
我试过这个,所以每当管理员说到时,脚本都会生成文件language_config.php.

class MY_Lang extends CI_Lang {
  public function __construct()
  {
    parent::__construct();
    include_once(APPPATH.'/config/system_generated/language_config.php');

    // languages
    $languages = $generated['languages'];

    // special URIs (not localized)
    $special = $generated['special'];
  }

和生成的文件

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 
  // languages
  $generated['languages'] = array(
    'en' => 'english','nl' => 'dutch'
  );

  // special URIs (not localized)
   $generated['special'] = array (
    "admin","link"
  );

我不是问如何生成文件,而是如何在库文件中包含和使用包含的文件(并将变量设置为私有).我无法在构造函数中设置私有变量有没有办法将包含的变量设置为私有?

编辑:解决方案

我忘记了私人规则和整个OOP $this-> …,下面的代码工作正常.

class MY_Lang extends CI_Lang {

private $languages;
private $special;

  public function __construct()
  {
    parent::__construct();
    include_once(APPPATH.'/config/system_generated/language_config.php');

    // languages
    $this->languages = $generated['languages'];

    // special URIs (not localized)
    $this->special = $generated['special'];
  }

EDIT2:另一个问题

当我加入新__constructor()我的课,它会导致问题,因为它不调用从CI_Lang __constructor()由于某种原因,即使在我的“添加” __constructor()有父:: __构造函数();应该调用CI_Lang __construcotr(),但事实并非如此.我甚至不知道如何调试这个.

EDIT2的解决方案

我的代码中有2个构造函数.只需合并它们.

解决方法

在构造方法__construct()中设置它们,如下所示:

private $languages;
private $special;

public function __construct()
{
    $this->languages = $generated['languages'];
    $this->special = $generated['special'];
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读