【问题标题】:Can PHP store Object state like the following code?PHP 可以像下面的代码那样存储对象状态吗?
【发布时间】:2009-06-30 14:31:40
【问题描述】:

我是 PHP 的新手,我想问我是否可以为对象内的所有数据初始化一次并在以后使用它们

<?
class Person(){

   private $data;//private or public
   function Person($data){
       $this->data['name'] = $data['name'];
       ....

   }

   function save(){
      $this->dbconn.executeQuery('insert into ... values('$this->data['name']',...));
      //some object to connect and execute query on a database.
   }

}
?>

$me = new Person(array(['name']=>'my fname my lname',...));
  $me->save();

//print_r($me) shows that $data has no initialized values

我该如何解决这个问题。如果您知道有相同问题的链接,请将其复制并粘贴到此处。谢谢。

【问题讨论】:

  • 抱歉,我不明白您要做什么以及卡在哪里...顺便说一句,“$this->dbconn.executeQuery”不是正确的 PHP 语法.
  • $this->dbconn 对象和 executeQuery 函数有助于在我的数据库上连接和执行查询。他们没有问题。每当我尝试使用 Person::Save 时都会遇到问题。事实上,我不想在调用时将参数传递给 Person::Save 。感谢您的回答。

标签: php class variables scope


【解决方案1】:

两件事。我认为您错误地传递了数据,并且错误地设置了您的课程:

<?php
class Person {
    function __construct($data){
        $this->data = array();
        $this->data['name'] = $data['name'];
    }

    function save(){
        // Do something here.
    }
}

$info = array();
$info['name'] = "Joe Blogs";

$someone = new Person($info);
print_r($someone);
?>

对我来说,这会打印出应有的信息。

【讨论】:

  • 谢谢,我要试试这个,看起来可能可行。问题可能是我构造对象的方式。我使用 PHP4 方式进行初始化。数据初始化没有问题,因为我使用了一个简单的符号。再次感谢您的回复。
  • 没问题 - 这应该可以工作,因为我将它上传到测试服务器并获得预期的响应。 LMK 如果这有帮助。
  • 它有效 我试过了 =: class Tester{ function __construct($data){ $this->data = array(); $this->data['name'] = $data['name']; $this->data['age'] = $data['age']; } function save(){ echo '调用
    '; print_r($this); } } $me = new Tester(array("name"=>"Pascal Maniraho","age"=>2000)); $我->保存();我被称为 Tester Object ( [data] => Array ( [name] => Pascal Maniraho [age] => 2000 ) ) 再次感谢您的帮助。
【解决方案2】:

您可以使用serialize,然后将对象存储在您想要的位置。但在这种情况下,特别是如果您在反序列化对象后尝试使用 db 连接,您可能会遇到问题,因为该对象的连接不是持久的。

另一方面,请记住始终加载类定义,否则当您尝试反序列化对象时会出错,因为 php 不会知道您已序列化的类

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-10
    • 1970-01-01
    • 2014-08-28
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 2019-04-27
    相关资源
    最近更新 更多