小编use*_*841的帖子

我如何绕过没有数组作为PHP中的类常量?

我有一个静态方法的类.有一个数组可以检查传递的字符串参数是否为set的成员.但是,使用静态方法,我不能在未实例化的类中引用类属性,也不能将数组作为类常量.

我想我可以在静态方法中对数组进行硬编码,但是如果我需要更改它,我必须记得在两个地方更改它.我想避免这种情况.

php arrays oop constants

2
推荐指数
1
解决办法
219
查看次数

在php中获取类常量名称?

我有一个php类,其中包含一些表示实例状态的类常量.

当我使用该类时,在我运行一些方法之后,我会做一些检查以确保状态是我期望的.

例如,在调用某些方法之后,我希望状态为MEANINGFUL_STATUS_NAME.

$objInstance->method1();
$objInstance->method2();
if ( $objInstance->status !==  class::MEANINGFUL_STATUS_NAME ) { 
    throw new Exception("Status is wrong, should not be " . class::MEANINGFUL_STATUS_NAME . ".");
}
Run Code Online (Sandbox Code Playgroud)

但是,这给了我异常消息

"Status is wrong, should not be 2"
Run Code Online (Sandbox Code Playgroud)

当我真正想看到的是

"Status is wrong, should not be MEANINGFUL_STATUS_NAME"
Run Code Online (Sandbox Code Playgroud)

所以我失去了常名的意义.我正在考虑制作一个"转换表"数组,所以我可以将常量值转换回它们的名称,但这看起来很麻烦.我应该如何翻译它,所以我收到一条错误消息,让我更好地了解出了什么问题?

php oop class-constants

2
推荐指数
1
解决办法
7438
查看次数

include_path不递归?

我有几个独立的网站,住在不同的目录中.对于他们共同的包含,我将它生活在其他人居住的根目录中.

user@hostname:/var/www$ ls
website_1 website_2 website_3 common_files 
Run Code Online (Sandbox Code Playgroud)

我想包含一个Zend包,所以我有我的包含路径

ini_set("include_path", get_include_path() . ":/var/www/common_files/Zend");
require_once("Mail.php");
Run Code Online (Sandbox Code Playgroud)

Mail.php 加载好了,但是那里的某个地方就是这条线

require_once 'Zend/Mail/Transport/Abstract.php';
Run Code Online (Sandbox Code Playgroud)

这给出了这个错误

Warning: require_once(Zend/Mail/Transport/Abstract.php): failed to open stream: No such file or directory in var/www/common_files/Zend/Mail.php on line 26
Run Code Online (Sandbox Code Playgroud)

所以php不会递归地进入包含路径的目录结构.我是否必须将Zend移动到每个网站目录中,拼出每个包含的路径,或者什么?


BTW摘要确实存在:

user@host:/var/www/common_files/Zend$ tree -d 
...
`-- Mail/Transport
    |-- Mail/Transport/Abstract.php
    |-- Mail/Transport/Exception.php
    |-- Mail/Transport/Sendmail.php
    `-- Mail/Transport/Smtp.php

9 directories, 32 files
Run Code Online (Sandbox Code Playgroud)

php server-side-includes include-path

2
推荐指数
1
解决办法
1782
查看次数

用于路径缓存的快速、无碰撞哈希算法?

我正在使用 php 转换网站。我的过程的一部分是验证图像路径没有指向不存在的图像(即没有损坏的图像)。由于许多页面共享某些图像,因此我设置了一个缓存数组以查看是否已检查给定路径的图像文件是否存在。

使用原始路径字符串作为数组索引不起作用,所以我使用了md5(),这就是诀窍。但是,转换脚本需要很长时间,而且很明显这是因为 md5 计算(过去几天我一直在频繁地运行转换,我立即注意到,一旦我的缓存开始工作,脚本运行时间要长得多。)

所以我想知道是否有一种更快的哈希算法可以在我的缓存中使用,当然我需要一个不会产生冲突的算法。由于这是一次性脚本,因此我不需要超级安全的牢不可破的算法,只需要一种可以更快地完成工作的算法。

此注释显然是 php 可用的所有散列函数的列表。

编辑我在评论中没有对此引起太多关注,但是当我使用路径的纯字符串作为缓存数组的索引时,它不起作用。一旦我将其更改为 md5 哈希,它就起作用了。如果我有更多时间,我会解决这个问题,但这是一个一次性项目,我不能花超过我绝对必须的时间。

发布编辑好的,显然我的缓存有问题;当我将索引更改为导致缓存开始工作的散列时,我一定改变了一些东西,而不管散列如何。人们说我的哈希应该可以处理文件路径字符串,而且 md5s 不会花费那么长时间。所以,我不知道我做错了什么,我没有时间在这个项目中弄清楚。我会删除这个问题,但它已经有了答案。

php hash

2
推荐指数
1
解决办法
1469
查看次数

引用名称中带有破折号的对象属性

我有一个XML文档,其中的标签带有两个破折号,如下所示:<item--1>。我正在使用SimpleXML来解析此文档,因此它为我提供了带有标签名称的对象属性。我想这显然是个问题,因为破折号对于变量和属性名称是无效字符。

<?php

$xml = "<data><fruits><item>apple</item><item--1>bananna</item--1></fruits></data>";

$xml = simplexml_load_string($xml);

foreach( $xml->children() as $child ) {
  var_dump($child->item);
#  var_dump($child->item--1);
}
Run Code Online (Sandbox Code Playgroud)

运行此命令时,

object(SimpleXMLElement)#5 (1) {
  [0]=>
  string(5) "apple"
}
Run Code Online (Sandbox Code Playgroud)

但是,如果取消注释最后一行,即带有两个破折号的xml元素,则会出现错误:

PHP Parse error:  syntax error, unexpected T_LNUMBER in test.php on line 17
Run Code Online (Sandbox Code Playgroud)

我尝试使用花括号:

var_dump($child->{item--1});
Run Code Online (Sandbox Code Playgroud)

但这只给了我这个错误:

PHP Parse error:  syntax error, unexpected T_DEC
Run Code Online (Sandbox Code Playgroud)

是减量运算符,或--

如何引用该对象的属性?

php syntax properties simplexml

2
推荐指数
1
解决办法
799
查看次数

在PHP中将对象属性传递给闭包

我试图将一个对象属性传递给一个闭包(这是在该对象的方法内),如下所示:

class Entity extends ControllerBase {
  private $view;
  private $events;
  public function print($tid) {
    self::loadView($tid);
    self::loopView();
    return (new StreamedResponse(function() use ($this->events){
      ...
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

$ events属性在loopView()方法中实例化.这似乎应该对我有用,但我得到这个错误:

ParseError: syntax error, unexpected '->' (T_OBJECT_OPERATOR), expecting ',' or ')' in ...
Run Code Online (Sandbox Code Playgroud)

它似乎在说它不希望有一个引用的对象use.我不知道为什么这是无效的,经过一些谷歌搜索,我找不到任何引用我的具体问题.

在PHP 7.1.7中,是否可以执行此操作,如果是,那么正确的语法是什么?

php closures

2
推荐指数
1
解决办法
133
查看次数

显示与其他分支不同步的分支

我正在创建一个 git 别名,以便在部署后将 master 合并到突出的开发分支。

我可以使用以下命令找出哪些分支未合并到 master 中:git branch --no-merged master。但是,从该列表中,我可以签出未合并的分支,并且来自 master 的新提交可能已经合并到其中。

$ git branch --no-merged master
2019-01-20_resize-tracking
* 2019-03-27_D8-752_config-module
...

$ git checkout 2019-01-20_resize-tracking
Switched to branch '2019-01-20_resize-tracking'
Your branch is up-to-date with 'origin/2019-01-20_resize-tracking'.

$ git merge master
Already up-to-date.
Run Code Online (Sandbox Code Playgroud)

如何找到哪些分支未合并到给定分支中,并且也不是最新的?

git

2
推荐指数
1
解决办法
174
查看次数

如何将数据插入PHP中的列到MariaDB?

我熟悉MySql数据库,但有一个名为MariaDB的新数据库.我尝试从PHP代码插入数据而我不能,所以你可以帮我插入数据吗?我在服务器上的PHP是5.4.32,我的MySQL版本是10.0.20-MariaDB-cll-live.

这是我用来尝试将数据插入MariaDB的代码.

$connection = mysql_connect("localhost", "root", ""); // Establishing Connection with Server
$db = mysql_select_db("database", $connection); // Selecting Database from Server

if(isset($_POST['submit'])){ // Fetching variables of the form which travels in URL
    $name = $_POST['name'];
    $email = $_POST['email'];
    if($name !=''||$email !=''){
       //Insert Query of SQL
       $query = mysql_query("insert into VIP Membership(Name, Email) values ('$name', '$email')");
       echo "<br/><br/><span>Data Inserted successfully...!!</span>";
    }
    else{
       echo "<p>Insertion Failed <br/> Some Fields are Blank....!!</p>";
    }
}

mysql_close($connection); // Closing Connection with Server
Run Code Online (Sandbox Code Playgroud)

编辑:我现在使用mysqli代码,但它给我一个错误500.

<?php
$servername …
Run Code Online (Sandbox Code Playgroud)

php mysql mariadb

1
推荐指数
1
解决办法
7810
查看次数

git checkout默认情况下不创建本地分支并跟踪远程

我正在克隆一个网站存储库。远程主机相当有限;我无法拨回仓库。

克隆存储库时,源设置为远程主机mysite@mysite.acquia.com。当我这样做时git checkout {branch name},新的本地分支会自动跟踪远程

因为我不想在远程仓库上放一堆开发分支,所以我用删除了源git remote rm origin。然后,我origin基于bare内部共享驱动器上的存储库制作了一个新的远程服务器git remote add origin file:///h/path-to-repo。(此遥控器已经具有我的开发分支)。

然后,因为最终我希望将开发分支推送到通用远程仓库,所以我又添加了原始源,这次称为acquiagit remote add acquia mysite@mysite.acquia.com

所以现在我的遥控器看起来像这样:

$ git remote -vv
acquia mysite@mysite.acquia.com
origin file:///h/path-to-repo
Run Code Online (Sandbox Code Playgroud)

但是,当我从任一远程签出分支时,默认行为不再是创建具有相同名称的新本地分支来跟踪远程。相反,我处于无头状态:

$ git checkout origin/2017-04-11_social-media-footer
Note: checking out 'origin/2017-04-11_social-media-footer'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without …
Run Code Online (Sandbox Code Playgroud)

git

1
推荐指数
1
解决办法
1466
查看次数

Laravel 7.1 中从 URL 获取查询参数

作为学习练习,我正在 Laravel 7.1 中创建一个 REST API。我无法弄清楚如何解析路由方法中的查询字符串参数。我已阅读此处的文档,它显示了如何将参数添加到路径中:

Route::get('user/{id}', function ($id) {
    return 'User '.$id;
});
Run Code Online (Sandbox Code Playgroud)

但是我不知道在哪里可以从请求 URL 获取查询参数。在我的玩具代码中,我想添加一条路线以将新车添加到库存中:

Route::post('/inventory/add/{make}/{model}/{year}', function ($make, $model, $year) {
    return \App\Inventory::create($model, $color, $trim, $accessories);
});
Run Code Online (Sandbox Code Playgroud)

我想通过查询字符串指定颜色、装饰和配件等参数,如下所示:

http://example.com/inventory/add/ford/focus/2020?color=red&trim=sport&accessories=chrome-wheels
Run Code Online (Sandbox Code Playgroud)

如何从方法中获取查询参数Route::post

编辑我认为这种架构可能不是添加这些额外信息的最佳方式,但由于我正在尝试学习 laravel,所以我使用它作为示例。我对学习如何获取查询参数更感兴趣,而不是如何改进这个学习示例的架构。

routes laravel

1
推荐指数
1
解决办法
3896
查看次数