本站资源收集于互联网,不提供软件存储服务,每天免费更新优质的软件以及学习资源!

像对待对象一样使用变量

网络教程 app 1℃

像对待对象一样使用变量

本文仅代表个人观点,不构成任何建议。

Ruby和JavaScript等语言的一个吸引人的特性是其变量作为对象处理的方式。这种设计在某些情况下提升了代码可读性,但在另一些情况下则并非如此。

例如:

# Ruby程序,演示length方法str = "hello, world!"puts str.length # 在控制台打印13

PHP中的等效代码:

$str = ‘hello, world!’;echo strlen($str);

在我看来,Ruby或JavaScript的写法更具可读性,因为变量充当主语,方法充当谓语。

PHP不支持这种代码风格,因此我创建了一个类来模拟这种行为。但请注意,此类仅供学习和实验,不建议在生产环境中使用,因为它可能存在性能问题。

<?php namespace scalar;use Exception;use ReflectionFunction;class scalar { private $scalar; public function __construct($scalar) { if (!is_scalar($scalar)) {throw new Exception(‘非标量值’); } $this->scalar = $scalar; } public function __call($method, $arguments) { if (!function_exists($method)) {throw new Exception(‘函数’ . $method . ‘不存在’); } if (!empty($arguments) && array_keys($arguments) !== range(0, count($arguments) – 1)) {$reffunc = new ReflectionFunction($method);$params = $reffunc->getParameters();$mappedargs = [];foreach ($params as $param) { $name = $param->getName(); if (isset($arguments[$name])) { $mappedargs[] = $arguments[$name]; } elseif ($name === ‘data’) { $mappedargs[] = $this->scalar; } elseif ($param->isDefaultValueAvailable()) { $mappedargs[] = $param->getDefaultValue(); } else { throw new Exception("函数$method缺少必需参数:$name"); }}return $reffunc->invokeArgs($mappedargs); } else {array_unshift($arguments, $this->scalar);return call_user_func_array($method, $arguments); } } public function getScalar() { return $this->scalar; }}

重要的是,为了使此类正常工作,需要使用将变量名放在前面的函数调用方式。

<?php$data = new customerdata( name: $input[‘name’], email: $input[’email’], age: $input[‘age’],);?>

以下示例演示了如何使用这个类调用单参数和多参数函数:

<?phptry { $a = ‘hola mundo’; $a_object = new scalar($a); $result = $a_object->hash(algo: ‘sha256’, binary: true); echo $result; // ‘hola mundo’的二进制SHA256哈希值 echo $a_object->strlen(); // 返回10 (‘hola mundo’的长度)} catch (Exception $e) { echo ‘错误:’ . $e->getMessage();}?>

以上就是像对待对象一样使用变量的详细内容,更多请关注范的资源库其它相关文章!

转载请注明:范的资源库 » 像对待对象一样使用变量

喜欢 (0)