php-5.4 相关问题

PHP 5.4是PHP 5.3的后续版本。它于2012年3月1日发布。将此标记用于与PHP 5.4相关的特定于版本的问题。

修剪闭合中的钥匙

我的闭包返回它作为数组操作的键时遇到问题,我做错了什么? 输入: $数组=数组( '/key1/' => 空, '/key2/part1/' =>...

回答 1 投票 0

is_dir() 不可靠吗?或者是否存在可以缓解的竞争条件?

在工作中,我继承了一个具有文件上传过程的Web应用程序。此过程的一部分偶尔(每两周左右一次)会触发以下错误: PHP 警告:mkdir():文件 e...

回答 2 投票 0

为什么Traits不能直接实例化?

在 PHP 中测试特征时,我有点困惑为什么要引入特征。我做了一些小实验。首先我直接在类中调用特征方法 在 PHP 中测试特征时,我有点困惑为什么要引入特征。我做了一些小实验。首先我直接在类中调用特征方法 <?php trait HelloWorld { public function sayHello() { echo 'Hello World!'; } } class TheWorldIsNotEnough { use HelloWorld; public function sayHellos() { $o = new HelloWorld(); $o->sayHello(); } } $o = new TheWorldIsNotEnough(); $o->sayHellos(); ?> 我收到一个错误 Fatal error: Cannot instantiate trait HelloWorld in C:\xampp\htdocs\test.php on line 35 但是当我这样做的时候 <?php trait HelloWorld { public function sayHello() { echo 'Hello World!'; } } class MyHelloWorld { use HelloWorld; } class TheWorldIsNotEnough { use HelloWorld; public function sayHellos() { $o = new MyHelloWorld(); $o->sayHello(); } } $o = new TheWorldIsNotEnough(); $o->sayHellos(); ?> 我能够调用特征方法,结果显示“Hello World!”。 那么使用 Traits 的优点是什么?它与抽象类有何不同?请帮助我理解用法。谢谢。 Traits 不应被实例化。它们只是代码部分,您可以通过 use 在类中重用它们。您可以想象,trait代码会扩展并成为您的类的一部分。甚至令人悲伤的是: 特征本质上是语言辅助的复制和粘贴。 所以你的例子应该像这样工作: <?php trait HelloWorld { public function sayHello() { echo 'Hello World!'; } } class TheWorldIsNotEnough { use HelloWorld; public function sayHellos() { // your trait defines this method, so now you can // think that this method is defined in your class directly $this->sayHello(); } } $o = new TheWorldIsNotEnough(); $o->sayHellos(); //or simply $o->sayHello(); ?> 感谢所有发布答案的人,但经过大量研究后得到了我真正寻找的答案。我的问题是是什么使 Traits 与抽象类、继承等现有方法不同。在类内部调用时实例化它是可以的,但最大的区别是我们可以通过这种方式在类中包含多个特征 use class1, class2; 如果两个类中存在相同的方法并且我们想使用 class2 中的方法时发生冲突,我们会这样做 use class1, class2 { class2::method1 insteadof class1; } 甚至特征也可以有多个这样定义的特征: trait Class1 { use trait1, trait2; } 与继承不同;如果特征具有静态属性,则使用该特征的每个类都具有这些属性的独立实例。 检查此链接http://php.net/manual/en/language.oop5.traits.php#107965 特征与继承的另一个区别是特征中定义的方法可以访问它们所使用的类的方法和属性,包括私有的。 http://php.net/manual/en/language.oop5.traits.php#109508. 与接口实现不同的是,所有特征方法都可以访问而无需再次定义。 好吧,这可能不是正确的方法,但我想出了一种如何使用 Traits 的方法,以及为什么它在某些情况下对我的项目更好。它们是类的一种扩展。如果您熟悉 CakePHP,这些 Traits 让我想起模型的行为或控制器的组件。只要查一下就可以了:-) 抽象类略有不同,因为您可以像这样使用它进行继承: abstract class HelloWorld { public function sayHello() { echo "Hello World!"; } abstract public function doFunnyStuff(); abstract public function doMoreFunnyStuff(); } class ConcreteHelloWorld extends HelloWorld { public function doFunnyStuff() { echo "Funny Hello!"; } public function doMoreFunnyStuff() { echo "More Funny Hello!"; } } $o = new ConcreteHelloWorld(); $o->sayHello(); // common property $o->doFunnyStuff(); // specialy implemented property $o->doMoreFunnyStuff(); // specialy impelemented property 特质更像是一个类的扩展。我正在 MVC 框架中使用 Traits 以这种方式扩展带有日志记录的类: trait Logger { public function saveLog($kindOf, $messasge, $serverity) { some_connect_to_DB_pseudo_code(); $sqlQuery = "INSERT INTO log (kindof, message, serverity) VALUES (".$kindof.", ".$message.", ".$serverity.")"; mysql_query($sqlQuery); // deprecated :-) } } class Controller extends AppController { use Logger; public function someAction($params) { $this->saveLog("CALL", __METHOD__." - started some Action with params: ".$params, 0); ... ... } } 它非常方便,因为我在每个类中都使用它,而且我不必在必须连接到数据库并生成 SQL 查询的地方再次编写所有这些行。由于我在整个 MVC 框架中拥有大量继承,因此我不必将 Logger 作为某些父类包含在内。只需将其与“use”关键字一起放入任何应该能够将日志信息发送到数据库的类中即可。 同样的事情对我来说也适用于调试消息,我只需写这样的东西: $this->debug("WARNING", $message); 我的调试特征正在制作一条格式良好的警告消息:-)希望它有助于理解。 Abstract和Trait类之间唯一的共同点是无法单独实例化a Trait/an Abstract。 但他们的目的不同。 Trait 仅旨在以细粒度且一致的方式对功能进行分组。它是通过使开发人员能够在生活在不同类层次结构中的多个独立类中减少单继承的一些限制,其中类只是提供一种继承模板并强制继承类实现抽象方法。

回答 4 投票 0

致命错误:未捕获的 ArgumentCountError:函数参数太少(将 php 脚本从 5.4 更改为 7.4)

我有问题。请帮助我。我在 php 5.4 中有一个函数,当我使用这个版本时一切正常。我想将我的脚本升级到 php 7.4。在 php 7.4 中我有这个错误。 致命错误:未捕获

回答 0 投票 0

如何将我的遗留 PHP 应用程序连接到 MySQL v8?

我有一个遗留的 PHP 论坛,我想将其设为只读以供存档。我已经设法让它在使用 php 5.4 的 docker 容器中运行,并且我已经很好地连接到...

回答 1 投票 0

如何将 var_export 格式化为 php5.4 数组语法

围绕来自 var 输出的有效 php 语法的主题有很多问题和答案,我正在寻找的是一种快速而干净的方法来获取 var_export 的输出以使用有效的 php5.4

回答 5 投票 0

如何在PHP 5.4中正确使用class_exists

我正在使用无法升级的PHP 5.4旧系统。我必须做一个小改动,添加一个名为FPDF / FPDI的PDF文件生成库,该库具有以下功能:受保护的功能...

回答 1 投票 1

全局变量在php中不起作用

我在使用全局变量时遇到一些错误。我在全局范围内定义了$ var,并尝试在函数中使用它,但在那里无法访问。请参见下面的代码以获得更好的解释:...

回答 4 投票 5


捕获ArgumentCountError和PHPUnit_Framework_Error_Warning

在PHP7和PHP5.4上测试缺少的参数异常的最佳方法是什么,当我为PHP7运行测试时,使用下面的代码可以很好地工作。但是在PHP5.4上,我遇到了下一个错误,因为这是...

回答 1 投票 0

PHP内置服务器,并重写.htaccess mod

PHP的内置服务器是否不使用.htaccess?我想这是有道理的,因为它不依赖于Apache(?)。无论如何,是否可以告诉服务器使用这些文件-它可以处理...

回答 2 投票 29

Laravel关系似乎不起作用

我在Laravel中有一个Item和AdvertItem对象。我想在项目和广告项目之间创建1对1的关系。项目类看起来像这样

回答 1 投票 0

OOP的哪些概念在PHP中不可用

[我在网上搜索了很多,但是找不到许多人在谈论PHP时在面试问题或一般问题中提出的答案。.哪些OOP概念不可用...

回答 3 投票 -2

PHP多卷曲请求延迟,直到超时

总结我有一些PHP 5.4代码使用多卷曲其取出一批的Facebook / Instagram的照片并联。该代码已经工作了多年,据我可以告诉一切都没有改变。 ...

回答 1 投票 1

查找本月的第二个和第四个星期六

如何找到本月的第2和第4个星期六。我写了这些文字: - echo“may 2nd sat”.date('d',strtotime('2013年第二个星期六'));回声' 可能第四次坐'。日期'('d',strtotime('可能...

回答 7 投票 7

PHP从5.4升级到7.2

我正在升级用于项目的PHP版本。使用PHP Code Sniffer查找PHP 7.2可能存在的问题。如何解决以下问题? 1)$ this-> mbstring_overload = ini_get('mbstring ....

回答 1 投票 0

将函数分配给PHP中的类变量[duplicate]

我可以在PHP中为类变量分配一个函数,即$ this-> variable。但是,当我尝试执行该函数时,它失败了:FATAL ERROR调用未定义的方法a :: f()这是一个......

回答 1 投票 0

首先升级symfony 2.8或php 5.4?

我将很快在一个项目上工作,我之前想问这个问题。该项目在symfony 2.8上使用php 5.4。目标是将symfony升级到3.4(可能是4.x之后)和php升级到7.x(可能是7.2)......

回答 2 投票 1

通过Composer安装会收到包含某些依赖项的错误

我正在尝试通过composer初始化我的symfony项目。但是我得到以下错误:问题1 - pugx / shortid-php的安装请求1. * - >可以通过pugx / shortid-php [1.0.x -...

回答 1 投票 0

httpd(apache)centos无法打开流:权限被拒绝

我正面临着centos 7服务器中的下一个错误我看了类似的问题,因为SELinux不允许httpd写入我的/ home文件夹,我试过更改...的所有者

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.