我想知道是否有人可以在这里提供帮助,我试图了解如何在多个非类页面中使用对象属性,但我似乎无法理解到目前为止我所尝试的所有内容。
例如一个叫做人的课程;
class person {
static $name;
}
但我有许多不同的常规网页,希望全面使用$name
。
我尝试过这样的事情;
pageone.php
include "person.php";
$names = new Person();
echo person::$name;
names::$name='bob';
pagetwo.php
include "person.php";
echo person::$name;
只要我在每个页面创建新实例,我就可以使用类,但是如何使一个对象的属性可供所有人使用,比如共享变量?
由于
答案 0 :(得分:3)
PHP脚本的每个新实例都“忘记”在先前脚本中完成的所有操作。在页面加载中为数据建立“存储空间”的常用方法是会话。会话本质上是用户在访问页面时获得的特定ID。该ID存储在cookie或附加到每个URL的GET变量中。 PHP将文本文件保存在可包含会话特定数据的特殊目录中。每个文件都使用会话ID命名。
PHP手册在这里有一个thorough introduction。
pageone.php
session_start();
$_SESSION["name"] = "Bob",
pagetwo.php
session_start();
echo $_SESSION["name"]; // Bob
现在,如果你有一个实例化对象,你可以serialize它,将它存储在一个会话变量中,然后在第二页中反序列化它。我不认为可以用静态类来完成。但这应该是一个好的开始。
答案 1 :(得分:0)
您需要在类声明本身内初始化静态变量:
class Person {
public static $name = 'bob';
}
或者,您需要一些引导机制,在其中启动静态变量:
bootstrap.php中:
Person::$name = 'bob';
然后在页面中:
// assuming, you preloaded the bootstrap somewhere first
$person = new Person();
echo $ person :: $ name;
修改强>
呃,我在想什么......上面甚至都行不通。您无法在实例上访问类似的静态成员。只能通过一种方法,如下:
class Person
{
public static $name;
public function getName()
{
return self::$name;
}
}
// assuming, you preloaded the bootstrap somewhere first
$person = new Person();
echo $person->getName();
/ end edit
或者正如Pekka指出的那样,使用会话来保持状态。
但更重要的是:你想要实现的目标是什么?如果你想在不同的请求之间维护Person对象的状态,那么Pekka的路由是要走的路,或者使用另一种持久存储机制,比如DB,File等......
因为我认为你不是故意让每一个名为'bob'的Person实例吗?我认为你的意思是维护一个Person实例的状态。
因此,最后,您可能不希望使用静态成员开始。