【问题标题】:PHP class private variable set from different (included) file来自不同(包含)文件的 PHP 类私有变量集
【发布时间】:2013-06-11 01:00:08
【问题描述】:

我有一个使用 private 变量的类,这些变量是“配置变量”,有时我需要它们“更改”(在我的示例中,如果我添加新语言,我需要在配置中使用新语言,它是 i18n CodeIgniter 的库。

我需要从数据库中设置$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',
    'sk' => 'slovak',
    'fr' => 'french',
    'nl' => 'dutch'
  );

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

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

编辑:解决方案

我忘记了 private 规则和整个 OOP $this-&gt;...,下面的代码可以正常工作。

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() 中有 parent::__constructor(); 应该调用 CI_Lang __construcotr(),但事实并非如此。我什至不知道如何调试。

EDIT2 的解决方案

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

【问题讨论】:

  • 从它们被标记为受保护的类扩展。我不知道你到底想做什么。
  • 我已经读了 3 遍了,但仍然不明白为什么你不能使用 $this-&gt;languages = $generated['languages'] 在构造方法中设置它们……还有什么可以添加的吗?让我明白吗?
  • Parse error: syntax error, unexpected 'private' (T_PRIVATE) in path...\application\core\MY_Lang.php on line 23
  • 你成功了!我的意思是在你的第一条评论之后(编辑之前),我自己想出来的和你一样:)谢谢你的输入。

标签: php codeigniter class include private


【解决方案1】:

在构造方法__construct()中设置它们,像这样:

private $languages;
private $special;

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

【讨论】:

  • 您好,这给我带来了问题 :),您能否查看对我的问题的修改并查看发生了什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-22
  • 2013-04-09
  • 1970-01-01
  • 2016-11-05
  • 2012-09-11
  • 2011-09-22
  • 1970-01-01
相关资源
最近更新 更多