资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

数据对象php 数据对象用一组刻画对象特性的属性进行描述

PHP数组转对象之后,怎么用对象的方式访问数据

这里定义2个php匿名对象和数组相互转换的函数,代码如下:

目前创新互联公司已为上1000+的企业提供了网站建设、域名、虚拟主机、网站托管维护、企业网站设计、科尔沁右翼中网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

function array2object($array) {

if (is_array($array)) { $obj = new StdClass(); foreach ($array as $key = $val){ $obj-$key = $val; } } else { $obj = $array; } return $obj;}function object2array($object) { if (is_object($object)) { foreach ($object as $key = $value) { $array[$key] = $value; } } else { $array = $object; } return $array;}

用法示例如下:

$array = array('foo' = 'bar','one' = 'two','three' = 'four');$obj = array2object($array);print $obj-one; // output's "two"$arr = object2array($obj);print $arr['foo']; // output's bar

php 数组和对象的问题

function get_obj_by_id($objs, $id)

{

if(!empty($objs))

{

foreach($objs as $obj)

{

if($obj-id == $id)

return $obj;

}

}

return null

}

恩,为什么你的obj-id是private的呢

希望能解决您的问题。

PHP数组里面存放对象

楼上解释正确,不过我补充一下。

既然初始化是在类声明之后,那么可以通过手动串行化和反串行化来达到目的。

保存的时候使用serialize来保存,提取恢复的时候使用unserialize来恢复。

当然,这个还有一个要注意的地方,需要保存的对象最好是只包含数据,意思是,不要有数据库连接资源、文件资源之类的,如果包含这些,串行和反串行的结果都是一个int 0,反串行的时候可能不能正常工作。

至于对象串行反串行的一些可定制的功能,可以参考帮助文档的这个部分:

通过定义魔术函数__sleep __wakeup来实现。

pga线和pdo线区别

PGA,是一种高结晶,可生物降解的脂肪族聚合物,降解速度快,主要用于手术缝合线等领域。

PDO一是PHP数据对象(PHP Data Object)的缩写。二是丙二醇简称PDO。三是阿曼石油开发公司(petroleum development of Oman.)的缩写。四是过程数据对象(Process data object)的缩写。五是太平洋十年涛动。

所以,pga和pdo的区别:PGA,是一种高结晶,可生物降解的脂肪族聚合物,降解速度快,主要用于手术缝合线等领域。

PDO一是PHP数据对象(PHP Data Object)的缩写。二是丙二醇简称PDO。三是阿曼石油开发公司(petroleum development of Oman.)的缩写。四是过程数据对象(Process data object)的缩写。五是太平洋十年涛动。

【高分悬赏】PHP对象为什么是数据类型?

对象就是一种类型,非常常见的,各类语言均如此。

对象是复杂类型,和数值、文本这些简单类型不同,对象可以包含多个不同的简单类型数据(叫做域或者字段),和多个处理这些数据的子查询(叫做方法)。

求助,系统的一个php数据对象,var

我们都知道如何从Mysql获取我们需要的行(记录),读取数据,然后存取一些改动。很明显也很直接,在这个过程背后也没有什么拐弯抹角的。然而对于我们使用面对对象的程序设计(OOP)来管理我们数据库中的数据时,这个过程就需要大大改进一下了。这篇文章将对如何设计一个面对对象的方式来管理数据库的记录做一个简单的描述。你的数据当中的所有内部逻辑关系将被封装到一个非常条理的记录对象,这个对象能够提供专门(专一)的确认代码系统,转化以及数据处理。随着Zend Engine2 和PHP5的发布,PHP开发者将会拥有更强大的面对对象的工具来辅助工作,这将使这个过程(面对对象地管理数据库)更有吸引力。 以下列出了一些使用对象来描叙你的数据库的有利方面: 存取方法(Accessor methods)将会使你对属性的读取和写入过程做到完全的控制 每一级的每个记录和属性(的操作)都有确认过程 从关系表中智能的获取对象 重复使用的逻辑方法意味着所有的数据交互都要通过相同的基础代码(codebase),这将使维护变得更加简单 代码简单,因为不同的记录的内部逻辑都已经包含在各自所处的类(class)当中,而不是繁琐的库(lib)文件 在手工编写代码和SQL查询语句时,出错的机会将更少 存取方法(Accessor methods) 存取方式是通过类给实例(instance)的变量赋值。一个例子,我有一个叫User的类,并且有一个实例$username,我会写这样的存取方法(函数),User-username()和User-setUsername()用来返回和给实例赋值。 ?php class User { var $username; function username() { return $this-username; } function setUsername($newUsername) { $this-username = $newUsername; } } ? 这里有很好的理由让我们编写这样的“特别的代码”。它将使开发者更灵活的改变类的繁琐的工作,因为这一过程将不需要其他的使用类的php代码。让我们来看看下面这个更加完善的可信赖的User类。 变量$username将不复存在,所有的东西都被整合的放在数组$_data当中 如果username是空的话,username()函数将提供一个缺省(默认)的值给它 setUsername()过程将在接受值之前确认username是否合乎标准格式(如字长等) ?php class User { var $_data = array(); // associative array containing all the attributes for the User function username() { return !empty($this-_data['username']) ? $this-_data['username'] : '(no name!)'; } function setUsername($newUsername) { if ($this-validateUsername($newUsername)) { $this-_data['username'] = $newUsername; } } function validateUsername($someName) { if (strlen($someName) 12) { throw new Exception('Your username is too long'); // PHP5 only } return true; } } ? 显而易见,这对我们控制存取对象的数据有很大帮助。如果一个程序员已经直接地存取username的信息,以上代码的变化将会破坏他的代码。然而我们可以使用(类的)存取方法,就像上面代码中注释的那样,添加一个验证的功能而不需要改变任何其他的东西。注意username的验证(例子当中是不能超过12字节)代码是独立在setUsername()方法之外的。从验证到存储到数据库的过程轻而易举。而且,这是个非常好的单凭经验的方法,一个方法或一个类需要做的越少,它的重复使用的机会将会越大。这在你开始写一个子类时更加明显,假如你需要一个子类,并且又要跳过(忽略)父类方法(行为)中的一些特殊的细节,如果(针对这个细节的)方法很小而又精细,(修改它)只是一瞬间的过程,而如果这个方法非常臃肿,针对多种目的,你可能将在复制子类中大量代码中郁闷而终。 比方说,假如Admin是User类的一个子类。我们对adamin的用户可能会有不同的,相对苛刻一些的密码验证方法。最好是跨过父类的验证方法和整个setUsername()方法(在子类中重写)。 更多关于存取器(Accessor) 下面是一些其他的例子来说明如何使存取器用的更有效果。很多时候我们可能要计算结果,而不是简单的返回数组中的静态数据。存取方法还能做的一个有用的事情就是更新(updating)缓存中的值。当所有的变动(对数据的所有操作)都要通过setX()方法的时候,这正是我们根据X来重置缓存中的值的时刻。 于是我们的这个类层次变得更加明了: 内部变量$_data的处理被替换成受保护的私有方法(private methods)_getData()和_setData() 这类方法被转移到被称作记录(Record)的抽象的超级类(super class),当然它是User类下的子类 这个记录类(Record class)掌握所有存取数组$_data的细节,在内容被修改之前调用验证的方法,以及将变更的通知发给记录(Records),就像发给中心对象存储(ObjectStore)实例。 ?php class User extends Record { // --- OMITTED CODE --- // /** * Do not show the actual password for the user, only some asterixes with the same strlen as the password value. */ function password() { $passLength = strlen($this-_getData('password')); return str_repeat('*', $passLength); } /** * Setting the user password is not affected. */ function setPassword($newPassword) { $this-_setData('password', $newPassword); } /** * fullName is a derived attribute from firstName and lastName * and does not need to be stored as a variable. * It is therefore read-only, and has no 'setFullname()' accessor method. */ function fullName() { return $this-firstName() . " " . $this-lastName(); } /** * Spending limit returns the currency value of the user's spending limit. * This value is stored as an INT in the database, eliminating the need * for more expensive DECIMAL or DOUBLE column types. */ function spendingLimit() { return $this-_getData('spendingLimit') / 100; } /** * The set accessor multiplies the currency value by 100, so it can be stored in the database again * as an INT value. */ function setSpendingLimit($newSpendLimit) { $this-_setData('spendingLimit', $newSpendLimit * 100); } /** * The validateSpendingLimit is not called in this class, but is called automatically by the _setData() method * in the Record superclass, which in turn is called by the setSpendingLimit() method. */ function validateSpendingLimit($someLimit) { if (is_numeric($someLimit) AND $someLimit = 0) { return true; } else { throw new Exception("Spending limit must be a non-negative integer"); //PHP5 only } } } /** * Record is the superclass for all database objects. */ abstract class Record { var $_data = array(); var $_modifiedKeys = array(); // keeps track of which fields have changed since record was created/fetched /** * Returns an element from the $_data associative array. */ function _getData($attributeName) { return $this-_data[$attributeName]; } /** * If the supplied value passes validation, this * sets the value in the $_data associative array. */ function _setData($attributeName, $value) { if ($this-validateAttribute($attributeName, $value)) { if ($value != $this-_data[$attributeName]) { $this-_data[$attributeName] = $value; $this-_modifiedKeys[] = $attributeName; $this-didChange(); } else { // the new value is identical to the current one // no change necessary } } } /** * For an attribute named "foo", this looks for a method named "validateFoo()" * and calls it if it exists. Otherwise this returns true (meaning validation passed). */ function validateAttribute($attributeName, $value) { $methodName = 'validate' . $attributeName; if (method_exists($this, $methodName)) { return $this-$methodName($value); } else { return true; } } function didChange() { // notify the objectStore that this record changed } } ? 现在我们拥有了一个抽象的超级类(Record),我们可以将User类里面大量的代码转移出来,而让这个User的子类来关注User的特殊项目如存取和验证方法。你可能已经注意到在我们的这个纪录类(Record class)没有任何的SQL代码。这并不是疏忽或者遗漏!对象存储类(ObjectStore class)(隐藏在第二部分)将负责所有和数据库的交互,还有我们的超级类Record的实例化。这样使我们的Record类更加瘦小而又有效率,而这对于评价我们处理大量对象的效率的时候是个重要因素。


文章名称:数据对象php 数据对象用一组刻画对象特性的属性进行描述
标题来源:http://cdkjz.cn/article/hehoss.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

业务热线:400-028-6601 / 大客户专线   成都:13518219792   座机:028-86922220