Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将所有字符串和数组作为对象PHP_Php_Oop - Fatal编程技术网

将所有字符串和数组作为对象PHP

将所有字符串和数组作为对象PHP,php,oop,Php,Oop,我想使用所有字符串和数组作为一个对象,在这里我们可以添加我们的函数 <?php // Str class class Str { private $str; public function __construct($str) { $this->str = $str; } public function len() { return strlen($this->str); } public funct

我想使用所有字符串和数组作为一个对象,在这里我们可以添加我们的函数

<?php
// Str class
class Str {
    private $str;
    public function __construct($str) {
        $this->str = $str;
    }
    public function len() {
        return strlen($this->str);
    }
    public function md5() {
        return new static(md5($this->str));
    }
    public function __toString() {
        return $this->str;
    }
}

// to cast string into str object
function str($str) {
    return new Str($str);
}

// casting string to str object
$str = str("Hello World");

echo $str;
// output: Hello World
echo $str->len();
// output: 11
echo $str->md5()->md5();
// output double md5 of string 'Hello World'

不,它不会消耗太多内存。而且,除了在应用程序中可重用之外,不会出现任何性能问题。

这是一个有趣的想法。由于原型方法的缘故,它类似于JavaScript的字符串函数/对象/构造函数。我过去也做过类似的事情,它没有任何内存或性能问题。您可能希望利用一些神奇的方法,例如
\uuuuuToString()
(我看到您已经在这样做了),以及
\uuuCall()
\uCallStatic()
。添加
实现可序列化的
也是一个好主意。通过一些聪明的方法,你可以拥有一个相当好的函数类。尽管我宁愿使用字符串文字,因为这样的实现不会真正提供任何功能方面的信息。但是如果你能想出一个有用的实现,也许是为了构建某种JavaScript引擎,你可以从最顶级的类开始,也许是
JSObject
,然后将你的类重命名为
JSString
,并扩展它,还有
JSArray
JSDate
等。如果您能在PHP中实现一个类似JavaScript的环境,包括继承和所有功能,我会很感兴趣。听起来像是一个有趣的项目,但我真的想不出它的实际用途。但就扩展PHP知识和掌握它而言,我认为这是一个很好的学习机会,让你自己了解PHP的局限性。将PHP的局限性推到极限,您可能会学到一些东西。如果你决定走这条路,还有两种神奇的方法可以让你玩得开心<代码>\uu get()
\uu set()
。例如,通过这种方式,您可以调用
$myString->length
$myObject->key=“value”
并将其存储到内部数组中,以便在数据发生更改时轻松对其执行操作。如果决定定义动态属性,请确保定义
\u isset()
方法。另见:

编辑:

也许一个有用的实现是定义层次结构的能力,例如有多少站点必须管理类别/子类别以及每个类别中的产品数量。这样的实现将允许您轻松定义这样的层次结构,而不必担心子对象或子对象或孙子对象的数量等。但即使如此,也不太实用,因为我宁愿使用递归函数来遍历这样的层次结构。也许更实用的实现是某种HTML解析器。但这是对轮子的重新发明,尽管这是一个很好的实践。不过,我所知道的是,许多PHP框架利用上述特性来实现
MVC
环境。因此,如果您认为可以构建一个比现有框架更好的框架,或者针对编码人员的其他相关环境,那么这可能是上述功能最实际的实现。

如果您愿意,以这种方式编写代码没有什么错。然而,这是一个基于观点的问题,并不真正属于这样的问题。我已经完成了你定义的所有事情。即使我在数组迭代器的key和values中也添加了这个string对象,我还编写了使用in(PDO::FETCH_类)的定制PHP PDO类,以便在使用之前将所有字符串和数组转换为str对象。我只怀疑它会消耗更多的内存吗?不,像PHP这样的弱类型语言在垃圾收集方面非常好。但是,如果您非常关心内存,那么像PHP这样的弱类型语言可能不适合您。只要您不使用海量数据,就可以了。如果您最终使用的是海量数据,那么内存将是一个问题,您不应该依赖任何快捷方式。您可以通过检查自己监控代码:您可能希望利用一些神奇的方法,例如_toString()(我看到您已经在这么做了),以及_call()和_callStatic()。添加可序列化的实现也是一个好主意。通过一些聪明的方法,你可以拥有一个相当好的函数类。尽管我宁愿使用字符串文字,因为这样的实现不会真正提供任何功能方面的信息。