【问题标题】:php include_once not work in classphp include_once 在课堂上不起作用
【发布时间】:2025-12-28 03:45:12
【问题描述】:

我正在努力将一个项目转换为多语言 但我对 require_once("../idioma/lang.br.php"); 有疑问下面

require_once("../idioma/lang.br.php");
require_once("../classe/class.usuario.dao.php");

Class UsuarioBLL 
{
    public function CadastraUsuario($campos)
    {
        $msg = array();
        // senha
        if(strlen($campos['senha']) >= 6 && strlen($campos['senha']) <= 30)
            array_push($msg,$user["TAMANHO_SENHA"]);

        if ($campos['senha'] != $campos['csenha'])
            array_push($msg, $user["SENHA_DIFERENTE"]);     

        $dao = new UsuarioDAO();

array_push($msg,$user["TAMANHO_SENHA"]);

数组变量

$user["TAMANHO_SENHA"] 

null

这是一个包含

<?php
//cadastro usuario
$user = array();
$user["PREENCHER_TUDO"]  = "Por favor preencha todos os campos.";
$user["TAMANHO_SENHA"]   = "Senha deve conter entre 6 a 30 digitos.";

如果我做一个 var_dump ($ user);上课前

require_once("../idioma/lang.br.php");
require_once("../classe/class.usuario.dao.php");
var_dump ($ user);
Class UsuarioBLL 
{
    public function CadastraUsuario($campos)
    {
        $msg = array();
        // senha
        if(strlen($campos['senha']) >= 6 && strlen($campos['senha']) <= 30)
            array_push($msg,$user["TAMANHO_SENHA"]);

        if ($campos['senha'] != $campos['csenha'])
            array_push($msg, $user["SENHA_DIFERENTE"]);       

        $dao = new UsuarioDAO();

系统打印

array(2) { 
["PREENCHER_TUDO"]=> string(35) "Por favor preencha todos os campos." ["TAMANHO_SENHA"]=> string(39) "Senha deve conter entre 6 a 30 digitos." 
} 

require_once("../classe/class.usuario.dao.php");

 $dao = new UsuarioDAO();

它的工作原理

我做了一个测试 我创造

class UserLang {
    public $user;
     function __construct() {
         $this->user["PREENCHER_TUDO"] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx.";
    }
}

现在可以使用了

$e = new UserLang();
echo $e->user["PREENCHER_TUDO"];

为什么要上课 并且类外的数组不起作用?

我不知道发生了什么

感谢您的帮助

【问题讨论】:

  • 不需要echo var_dump(),只需var_dump()
  • 您应该阅读这篇文章...*.com/questions/797380/…。另请注意,复制和粘贴代码而不是屏幕截图更可取。同样,使用全局变量的答案是非常糟糕的做法。
  • 您应该发布您的代码而不是图片。不过不要发布整个脚本,只发布理解问题所需的摘录。
  • 我整理了后期脚本
  • 请再看帖子

标签: php


【解决方案1】:

你的班级看不到外面的东西。如果您的意思是让该类在特定的用户数据集上工作,则应将其设为类属性。这是最简单的方法:

Class UsarioBLL{
    public $user; //needs to be set before other functions can use it
}

创建对象后,设置用户

$usario = new UsarioBLL();
$usario->user = $user; //now  the class can see the user data!

完成此操作后,您的 CastradaUsario 函数将看到数据。

为什么类工作和类外的数组不起作用?

请注意,您的require_once("../idioma/lang.br.php") 在类定义上方插入$user 数组。您的问题与variable scope 有关。在类外定义数组时,类成员看不到它

$user = [...];
Class UsarioBLL{
// $user is undefined here.
}

要获得可见性,您需要传递数据并将其存储在类变量中。最简单的方法是在我上面的原始答案中。另一种方法是将数据传递给类构造函数:

Class UsarioBLL{
    private $user;
    __construct($input_data){this->user = $input_data}
}

__construct 在创建新对象时调用。所以像这样创建你的新对象:

$usario = new UsarioBLL($user); //will call __construct and pass $user

【讨论】:

  • 是的,我可以将数组作为参数传递,但是因为“class.usuario.dao.php”包括工作?低于 $dao = new UsuarioDAO();它不显示错误,这不应该也出现错误吗?
  • 请再看帖子
  • 感谢您清理您的问题。我已经编辑了我的答案
  • 工作 .... UsuarioBLL 类 { public function CadastraUsuario($campos) { require_once("../idioma/lang.br.php"); $msg = 数组(); // senha if(strlen($campos['senha']) >= 6 && strlen($campos['senha'])