小编Den*_*nis的帖子


PHP的use语句在加载类时是否会引起额外的工作?

代码样本1

use Outline\Drawing;
$var = new Drawing();
Run Code Online (Sandbox Code Playgroud)

代码样本2

$var = new Outline\Drawing();
Run Code Online (Sandbox Code Playgroud)

题:

如果我在示例1中使用代码,PHP是否会使硬件工作更困难(查找更多文件或进行更多处理)?我敢肯定,即使是在某些代码级别上,找出哪些use行与哪个类相匹配,事情还是会完成的。我想确切地了解正在发生的事情。

简而言之:

  • 在弄清楚use语句的使用与它应该用于的类之间的联系时,PHP会做什么?
  • 当涉及到这两个代码样本时,PSR-0 / PSR-4自动加载器的工作方式是否受到影响?

php autoload psr-0 psr-4

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

PHP致命错误:在第X行的<file>中找不到类'InvalidArgumentException'?

我在我看到这一行php.log:

PHP Fatal error:  Class 'MyNamespace\InvalidArgumentException' not found in <file> on line X
Run Code Online (Sandbox Code Playgroud)

第X行包含:

throw new InvalidArgumentException("Error");
Run Code Online (Sandbox Code Playgroud)

它发生在页面重新加载.首先,我将一些值放入表单中,单击"提交"并加载我的页面.我单击刷新页面(使用我的浏览器功能)重新加载页面,这是我收到错误的地方.

也许当我刷新页面时,会执行不同的代码路径.但我仍然认为这是一个应该始终有效的本机PHP类,但在我的情况下,它会抛出错误.

我在Windows上使用PHP,Apache2,最初是通过Zend Studio IDE套件安装的.

类的描述本身不提供我任何提示.为什么会抛出错误,我该如何解决?

更新*

我的代码是:

if (!isset($modelNumber)) //$modelNumber is NULL when I refresh
        throw new InvalidArgumentException("Error");
Run Code Online (Sandbox Code Playgroud)

所以无论什么时候我打这个课我都会遇到这个错误.当我删除isset行并直接抛出类时,它总是给我错误.

php logging apache2

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

错误:不应该静态调用,假设$ this来自不兼容的上下文.只在我的机器上

我的团队成员静态地在控制器中编写了模型函数调用,例如:

$data = ModelName::functionName($param);
Run Code Online (Sandbox Code Playgroud)

它应该动态调用,例如:

$model = new Model();
$data = $model->functionName($param);
Run Code Online (Sandbox Code Playgroud)

大多数所有的电话都是静态的.代码正在服务器和本地机器上工作,除了我的.如果不重写庞大的代码库,静态调用就无法修复.

我总是通过作曲家更新我的项目.我的php版本是5.4.

谁都不知道这是关于什么的?

php static-methods

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

有没有办法将 MySQL 的 JSON_EXTRACT 与 JSON 字符串中的整数键一起使用?

是否可以JSON_EXTRACT与整数键一起使用?

我想[273, 140]从下面提取,但 SQL 不起作用......

SELECT json_extract('{"1": [273, 140], "2": [273.5, 198.5], "3": [209, 191]}', '$.1');
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html#operator_json-column-path 中的语法

我得到错误:

ERROR 3143 (42000): Invalid JSON path expression. 
The error is around character position 3
Run Code Online (Sandbox Code Playgroud)

mysql sql json

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

How to make entire row along with the checkbox in it, click and unclick when I anywhere click inside the table row?

I have a table

<tr>
    <td><input name="service_id[]" value="17" type="checkbox"></td>
    <td class="right">$175.00</td>
    <td>add 0 days to delivery</td>
</tr>
Run Code Online (Sandbox Code Playgroud)

And jQuery

$('#tableSelect tr').click(function() {
    if ($(this).find('td input:checkbox').prop('checked') == true)
        $(this).find('td input:checkbox').prop('checked', false);
    else    
        $(this).find('td input:checkbox').prop('checked', true);
});
Run Code Online (Sandbox Code Playgroud)

My goal is to have the checkbox click ON and OFF as I click on anywhere in the table row.

However what I get is I can click anywhere on the table row to click and unclick, but when I click inside the checkbox …

javascript checkbox jquery

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

如何在不使用create_function的情况下重写示例?

在查看PHP的create_function时,它说:

如果您使用的是PHP 5.3.0或更高版本,则应使用本机匿名函数

我想重新创建与create_function使用相同的功能anonymous function。我看不到方法或正确方法。

本质上,如何更改以下内容,以便不再使用create_function但仍可以输入要使用自己的参数求值的自由格式公式?

$newfunc = create_function(
    '$a,$b',
    'return "ln($a) + ln($b) = " . log($a * $b);'
);
echo $newfunc(2, M_E) . "\n";
Run Code Online (Sandbox Code Playgroud)

示例取自PHP create_function页面。

注意:

看起来与上面的示例一样,我可以传入任意字符串,并为我编译它。我可以不使用来以某种方式做到这一点create_function吗?

php anonymous-function create-function

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

如何设置PHP的错误日志的堆栈跟踪深度?

在我的php.ini设置这一行:

error_log = c:/php/php_errors.log
Run Code Online (Sandbox Code Playgroud)

它可以将错误输出到指定的文件中.

但是,它总是输出最多4,即:

PHP Fatal error:  Uncaught ServiceNotFoundException
Stack trace:
#0 PluginManager.php(124): AbstractPluginManager->get('getEntityManage...', NULL)
#1 AbstractController.php(301): PluginManager->get('getEntityManage...', NULL)
#2 AbstractController.php(316): AbstractController->plugin('getEntityManage...')
#3 AbstractPluginManager.php on line 133
^^^ stops at depth 4 always
Run Code Online (Sandbox Code Playgroud)

我想控制堆栈深度.怎么样?我在http://php.net/error-log上找不到任何东西

php configuration ini xdebug

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

单例模式如何在程序的整个生命周期中保持在内存中?

我有以下代码:

//init X (DB initialization with credentials)
$x = MySqlConnector::getMySql();

//I destroy $x
unset($x);
$x = null;

//I try to re-initialize the database, but it is already initialized
//as evident from my logs
$x = MySqlConnector::getMySql();
Run Code Online (Sandbox Code Playgroud)

相关功能:

public static function getMySql()
{
    if (null === static::$instance)
    {
        include 'include/config.php';
        static::$instance = new MySql(DBHOST, DBUSER, DBPASS);
    }

    return static::$instance;
}
Run Code Online (Sandbox Code Playgroud)

这告诉我,即使在我杀死了保存初始化对象的变量之后,仍然以某种方式MySqlConnector留在内存中。

如何?我认为它不适用于任何其他非静态类。

php singleton scope

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

使用"this->"区分构造函数内的变量名

我记得我曾经能够做到这一点,让它按预期工作:

class foobar
{
public:
    foobar(int x, int y)
    {
        x = x; //the variables x, y belonging to the class got correctly initialized
        y = y;
    }

private:
    int x, y;
};
Run Code Online (Sandbox Code Playgroud)

我相信,以上版本在Microsoft Visual C++ 6.0和一些更高版本上的工作量大约为200倍.
但现在我必须在Microsoft Studio 2013上执行此操作,我必须使用this->,因此:

class foobar
{
public:
    foobar(int x, int y)
    {
        this->x = x; //the other way no longer initializes class vars
        this->y = y;
    }

private:
    int x, y;
};
Run Code Online (Sandbox Code Playgroud)

是否有语言规范更改或Microsoft编译器更改?

c++ language-specifications visual-studio visual-studio-6 visual-studio-2013

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