小编dan*_*317的帖子

PHP:调用变量函数名称; 如何告诉IDE我的函数被调用?

我目前正在尝试删除我的项目中的所有错误和警告,我的PHPStorm中的检查工具给了我.

我遇到一个片段PHPStorm说"未使用的私有方法_xxx"虽然它实际上使用,但以动态的方式.这是一个简化的代码段:

<?php
class A
{
    private function _iAmUsed()
    {
        //Do Stuff...
    }

    public function run($whoAreYou)
    {
        $methodName = '_iAm' . $whoAreYou;
        if (method_exists($this, $methodName)) {
            $this->$methodName();
        }
    }
}

$a = new A();
$a->run('Used');
?>
Run Code Online (Sandbox Code Playgroud)

在这个片段中,PHPStorm将告诉我"未使用的私有方法_iAmUsed",而事实上,它被使用...我怎么能通过添加PHPDocs或其他东西,让我的IDE理解我的方法实际上是用的?

请注意,我给我的"运行"调用,一个静态字符串,但我们可以想象这个:

<?php
$a->run($_POST['whoYouAre']); //$_POST['whoYouAre'] == 'Used'
?>
Run Code Online (Sandbox Code Playgroud)

非常感谢!

php phpdoc variable-names phpstorm

19
推荐指数
2
解决办法
3006
查看次数

为什么SQL Server选择查询truncate varchar string?

建立

我正在使用几个内存表来缓存我网站的数据.这是我的mac上的本地web主机和linux上的dev服务器,使用php 5.5上的mssql php库

简化表格如下:

CacheID INT NOT NULL
CacheData VARCHAR(MAX)
Run Code Online (Sandbox Code Playgroud)

我偶尔会插入几个大值.10,000多个字符.插件工作正常.一个简单的查询告诉我所有数据都在字段中:

SELECT
  CacheID,
  LEN(CacheData)
FROM Caches
Run Code Online (Sandbox Code Playgroud)

问题

但是,当我实际选择数据时,该cache列总是被截断为8192个字符,从而导致出现问题.简单选择:

SELECT
  CacheData
FROM Caches
WHERE CacheID = 10
Run Code Online (Sandbox Code Playgroud)

我检查了varchar(max)字符限制.它远远超过8192.2^32 - 1

这个问题

为什么数据被截断?

另一种形式的问题.我实际上遇到了这个agian而忘记了这个解决方案.当我忘记根本原因时,请记住我.这是我搜索认为SQL Server是罪魁祸首.

什么是SQL Servers Varchar(MAX)最大长度? - 如果你的值被截断它可能是由php非sql server引起的.如果您只想知道最大值是什么,这里回答的问题是:varchar(max)变量的最大大小

php sql-server varchar

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

为什么我必须在函数调用中使用引用运算符(&)?

建立

我从一个我经常用于自定义项目的开源CMS借用一个函数.

它的目的对于这个问题并不重要,但如果你想知道它是一个简单的静态缓存,旨在减少数据库查询.我可以在一个页面加载中调用getObject 10次,而不必担心10次访问数据库.

该函数的简化版本如下所示:

function &staticStorage($name, $default_value = NULL)
{
  static $data = array();
  if (isset($data[$name])
  {
    return $data[$name];
  }
  $data[$name] = $default_value;
  return $data[$name];
}
Run Code Online (Sandbox Code Playgroud)

这个函数将被调用如下:

function getObject($object_id)
{
  $object = &staticStorage('object_' . $object_id);
  if ($object)
  {
    return $object;
  }

  // This query isn't accurate but that's ok it's not important to the question.
  $object = databaseQuery('SELECT * FROM Objects WHERE id = @object_id', 
                          array('@object_id => $object_id'));
  return $object;
}
Run Code Online (Sandbox Code Playgroud)

我的想法是,一旦我调用static_storage返回值将更新静态存储.

问题

我感兴趣的是$object = …

php pointers pass-by-reference

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

在没有寻呼机的网站上处理大型列表的好策略是什么?

脚本

我有Web界面(在大型Web应用程序中),允许用户在两​​个非常大的列表之间建立连接.

列表A - 40,000多个项目
列表B - 1,000+项目
列表C - 包含b中连接到列表A中所选项目的项目列表

代码

这是当前行为减去数据库的ajax更新的粗略方面.

这是主要功能(仅在此处,因为堆栈溢出需要jsfiddle链接的代码片段).

$('.name-listb input').add('.name-listc input').click(function (e) {
    var lista_id = $('.name-lista input:checked').val();
    var listb_id = $(this).val();
    var operation = $(this).prop('checked') ? 'create' : 'delete';
    var $listb = $('.name-listb .checkbox-list');
    var $listc = $('.name-listc .checkbox-list');

    if (operation == 'create') {
        $listb.find('input[value=' + listb_id + ']').prop('checked', true);
        // Ajax request to add checked item.
        $new_item = $listb.find('input[value=' + listb_id + ']').parents('.option-group').clone();
        $listc.append($new_item);
    } else if (operation == 'delete') …
Run Code Online (Sandbox Code Playgroud)

javascript ajax performance jquery

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

如何强制手机识别我网站上的国际号码?

我在网站上输出了一个国际电话号码.例如:

<span class="phone-number">+1 918 555 5555</span>
Run Code Online (Sandbox Code Playgroud)

我的iPhone很聪明,可以将其识别为电话号码并拨打电话,但它会从号码中删除"+"号.因此,如果我的墨西哥朋友点击它,他将得到一个无效的号码.

我可以使用他们的一些元数据,还是我可以强迫手机添加保留国际号码的加号?

html php mobile drupal meta-tags

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

如何在类似字符串的sql中转义多个字符?

单个字符可以像这样转义:

select * from tableName where columnName like 'CU_C' escape '_';
Run Code Online (Sandbox Code Playgroud)

我需要转义多个字符("%"和"_"):

select * from tableName where columnName like 'C%U_C' escape ??;
Run Code Online (Sandbox Code Playgroud)

如何逃避多个角色?

sql escaping

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

如何使PhpStorm(JetBrains)在PHP中强制执行函数名称的区分大小写

这可能不是什么大问题,但我认为代码应该是一致的,我认为区分大小写对函数调用很重要.他们是一种让PhpStorm识别函数调用是否与其定义具有相同情况的方法吗?

偶尔我会发现updateNote看起来像是updateNOte因为我的右手打字比左边快.我想抓住这些并修复它们.

PhpStorm发现了许多其他语法项,如数据类型等,但我找不到这方面的检查.这样的检查是否存在?

php phpstorm

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

PHP有一个peek数组操作吗?

我想看一下数组的第一个元素.此操作将等效于此代码:

function peek($list)
{
  $item = array_shift($list);
  array_unshift($list, $item);
  return $item;
}
Run Code Online (Sandbox Code Playgroud)

这段代码对我来说似乎很重要,而peek通常由队列和堆栈库提供.php有一个已经构建的函数或一些更有效的方法来做到这一点?我搜索了php.net但无法找到任何东西.

为清楚起见,附加说明: 数组不一定是数字索引.数组也可能有一些未设置的项(在数字索引数组的情况下)弄乱了数字排序.假设$ list [0]是第一个元素是不安全的.

php arrays queue stack

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

如何在 dompdf 库上启用调试?

我正在使用 dompdf 库来输出一些报告。我得到了一个文件输出,但我有一些奇怪的行为。如何在dompdf中启用调试报告?

  $dompdf = new Dompdf();

  // something like this
  $dompdf->enableDebug();

  $dompdf->loadHtml($template);
  $dompdf->setBasePath(realpath('./'));
  $dompdf->render();
  $dompdf->stream('note');
Run Code Online (Sandbox Code Playgroud)

php dompdf

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

为什么 chrome 会显示弹出警告:“您所做的更改可能尚未保存。” 在每个页面退出?

设置

我实现了一些代码来防止用户从未保存的表单中丢失数据,这些数据本来应该显示这一点,但我的代码似乎没有被执行。我的代码:

$(window).on('beforeunload', function (e)
{
  if ($('.loading').length)
  {
    var confirmationMessage = 'Data is still being saved and/or loaded in the background. Leaving the page may cause your data to not be saved correctly.';

    (e || window.event).returnValue = confirmationMessage; //Gecko + IE
    return confirmationMessage; //Gecko + Webkit, Safari, Chrome etc.
  }

  if ($('form.detect-dirty.dirty').length)
  {
    var confirmationMessage = 'You have edited but not saved a form on this page.';

    (e || window.event).returnValue = confirmationMessage; //Gecko + IE
    return confirmationMessage; //Gecko + …
Run Code Online (Sandbox Code Playgroud)

javascript jquery google-chrome

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