小编Mar*_*ier的帖子

PNG_ALL_FILTERS,php gd中的自适应过滤

在PHP GD中,PNG_ALL_FILTERS做什么和与png图像的“自适应过滤”有什么关系?

背景

在php中,imagepngGD库中的函数具有用于过滤器的参数。关于过滤器类型常量文档允许这些常量表示的“显示”:

一种特殊的PNG过滤器,由imagepng()函数使用

确实非常有帮助。

SO上的这个答案可以提供更多信息,但是缺少有关常量的信息PNG_ALL_FILTERS。对我来说,其他过滤器似乎是互斥的,那么“全部”怎么办?

在搜索中,我发现对于png过滤,一种好的策略(在某些情况下)将是为每条扫描线分别选择最佳过滤器,称为“自适应过滤”。

考虑到上述情况,我猜想该PNG_ALL_FILTERS选项可以实现“自适应过滤” 。我猜对了吗?如果没有,什么 PNG_ALL_FILTERS办?我可以让GD从php进行自适应过滤吗?

非常感谢!

php png gd filtering

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

document.ready vs document.onLoad

我想知道哪一个是正确的运行js代码,根据窗口高度计算垂直菜单的高度,并按时,不迟到,不早.

我正在使用,document.ready但它并没有真正帮助我解决这个问题,它有时不设置,我必须重新加载页面,然后它正在工作,但不是第一次加载.

如何解决这个问题呢?

这是我的代码:

$(document).ready(function(){
     var winh = document.body.clientHeight;
     var footer = document.getElementById('footer').offsetHeight;
     document.getElementById('sidebar').style.height = winh - 5/2*footer + 'px';
     document.getElementById('sidebar').style.marginBottom = footer + 'px';

     $(window).resize(function(){
         var winh = document.body.clientHeight;
         var footer = document.getElementById('footer').offsetHeight;
         document.getElementById('sidebar').style.height = winh - 5/2*footer + 'px';
         document.getElementById('sidebar').style.marginBottom = footer + 'px';
     });
});
Run Code Online (Sandbox Code Playgroud)

javascript jquery onload document-ready

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

如何检查一个类是否定义了const(特征检测)

我在这个 SO Q&A中找到了关于如何检查变量是否存在的详细参考。

提到要检查一个类是否具有某个属性,可以使用(如 php.net 中所述):

$check = property_exists('MyClass', 'property_name');
Run Code Online (Sandbox Code Playgroud)

另外,对于“定义”的“常量”,可以使用:

$check = defined('MY_CONSTANT');
Run Code Online (Sandbox Code Playgroud)

问题:const班级里的a怎么样?

详细说明...我有一个在多个项目中使用的类(最小示例):

class ProjectSettings {
    const MY_CONSTANT = 'my constant';
}
Run Code Online (Sandbox Code Playgroud)

我正在编写一个新功能,它需要“项目设置”,但如果该设置在类中不存在,则应应用默认值。

请注意,同一个类在多个项目中使用(具有不同的值)。在所有现有项目中实施这个新的常量将会很麻烦。但是,新功能位于现有脚本中,我可以使用此新版本更新旧项目,而无需更新 ProjectSettings 类(例如,如果甚至没有使用此新功能)。这就是为什么我想使用特征检测。

我在想:

if (defined(ProjectSettings::MY_CONSTANT)) {
    $setting = ProjectSettings::MY_CONSTANT;
} else {
    $setting = 'some default value';
}
Run Code Online (Sandbox Code Playgroud)

然而,我徒劳的尝试导致:

var_dump(ProjectSettings::MY_CONSTANT);
// string(11) "my constant"
// (as expected)
var_dump(ProjectSettings::MY_OTHER);
// generates a PHP Fatal error

var_dump(defined(ProjectSettings::MY_CONSTANT));
// bool(false)
// (it exists, but is not 'defined', oh well...)
var_dump(defined(ProjectSettings::MY_OTHER));
// …
Run Code Online (Sandbox Code Playgroud)

php

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

变量处理顺序:PHP 7中的变化

现在使用新的PHP 7.0.0,我有点担心所谓的"变量变量"的评估顺序的变化.

此页面的 "对变量处理的更改"下,将显示一个表,其中包含表达式示例及其处理顺序,在PHP 5和PHP 7中.列出的四个表达式为:

$$foo['bar']['baz']
$foo->$bar['baz']
$foo->$bar['baz']()
Foo::$bar['baz']()
Run Code Online (Sandbox Code Playgroud)

给定以下字符串和数组:

$qux = 'quux';
$foo = array('bar' => array('baz' => 'qux'));
Run Code Online (Sandbox Code Playgroud)

表中的第一个表达式在$$foo['bar']['baz']PHP 5 中被解释为一个名为value in的变量的值$foo['bar']['baz'],因此值为$qux,即 'quux'.

但是,在PHP 7中,正如我所理解的那样,同一个表达式将被解释为一个名为value in的变量$foo,因此我希望PHP注意'数组到字符串转换',因为它$foo是一个数组.

表中的其他示例似乎是同一主题的变体.

当然,我很好奇为什么在PHP 7中改变了这一点(具体来说,为什么这种改变比向后兼容更重要),然而,这对SO来说不是一个合适的问题.我的问题更实用:

应对这种不兼容性的推荐方法是什么?

当然,加入大括号违规表达式将有助于(${$foo['bar']['baz']},$foo->{$bar['baz']},$foo->{$bar['baz']}()Foo::{$bar['baz']}()),但是这是非常麻烦的,经历吨的旧代码,寻找相对较少occurances ...

否则,这四个示例是唯一可能的语法变体吗?也就是说,我可以创建一个RegExp和grep所有违规代码吗?可能存在哪些其他变化?

php migration incompatibility variable-variables php-7

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