wawos 发表于 2024-12-24 11:04:16

有懂php代码的吗

为啥php系统函数一个参数如果想判断多个常量, 可以加一个竖线 &quot;|&quot; 一次性写在一个参数里<br />
<br />
比如判断ip是 ipv4 且 不是内网ip:<br /><div class="blockcode"><div id="code_aPF"><ol><li>filter_var($IP, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)<br /><li> &amp;&amp; filter_var($IP, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE)</ol></div><em onclick="copycode($('code_aPF'));">复制代码</em></div><br />
<br />
上面2句可以加一个竖线 &quot;|&quot; 直接写成一句, 不会有任何BUG:<br /><div class="blockcode"><div id="code_usG"><ol><li>filter_var($IP, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE)</ol></div><em onclick="copycode($('code_usG'));">复制代码</em></div>

wawos 发表于 2024-12-24 11:07:15

<i class="pstatus"> 本帖最后由 wawos 于 2024-12-24 11:08 编辑 </i><br />
<br />
<font color="RoyalBlue">但是自己测试, 自己定义一个函数 和 2个常量<br />
<br />
用这种加 &quot;|&quot; 同时传2个常量进去, 判断根本不行, 只能2句代码分别写单独判断才可以</font><br />
<br />
有那种加 &quot;|&quot; 同时传2个常量进去, 写法解释的官方教程吗

Kvm 发表于 2024-12-24 17:11:00

&amp;是 and<br />
|是 or

小瑞 发表于 2024-12-24 11:09:05

看不懂 有请下一位男嘉宾登场

wawos 发表于 2024-12-24 11:43:00

<i class="pstatus"> 本帖最后由 wawos 于 2024-12-24 11:14 编辑 </i><br />
<div class="quote"><blockquote><font size="2"><a href="https://hostloc.com/forum.php?mod=redirect&goto=findpost&pid=16143809&ptid=1377117" target="_blank"><font color="#999999">Kvm 发表于 2024-12-24 11:09</font></a></font><br />
&amp;是 and<br />
|是 or</blockquote></div><br />
<br />
别胡说好吗, 两个&amp;&amp;和||才是and和or, 单个一个&amp;和|是 完全 完全不同的 <br />
<br />
竖线运算优先级, 它是要先运算了, 才会把这个结果数字(1个数) 传给函数啊,<br />
<br />
函数怎么知道之前写的两个常量数是啥呢

a5582323 发表于 2024-12-24 11:09:28

<font color="Magenta">google:位运算符</font><font color="DarkOrange"><br />
<br />
<br />
<br />
/**<br />
* 大风起兮云飞扬,意大利炮轰他娘<br />
*/</font>

wawos 发表于 2024-12-24 11:12:03

<div class="quote"><blockquote><font size="2"><a href="https://hostloc.com/forum.php?mod=redirect&goto=findpost&pid=16143833&ptid=1377117" target="_blank"><font color="#999999">a5582323 发表于 2024-12-24 11:15</font></a></font><br />
google:位运算符</blockquote></div><br />
竖线运算付, 它是要先运算了, 才会把这个结果数字(1个数) 传给函数啊,<br />
<br />
函数怎么知道之前写的两个常量数是啥呢

入学申请 发表于 2024-12-24 11:09:00

上面瞎扯呢这里的|是位运算。。<br />
php || 才是 or &amp;&amp; 是 and<img id="aimg_iOgo0" onclick="zoom(this, this.src, 0, 0, 0)" class="zoom" src="https://cdn.jsdelivr.net/gh/master-of-forums/master-of-forums/public/images/patch.gif" onmouseover="img_onmouseoverfunc(this)" onload="thumbImg(this)" border="0" alt="" />

ymh1147 发表于 2024-12-24 11:15:16

这个是对的,可以这样写

掌柜 发表于 2024-12-24 11:15:48

问得很好,下次别问了。找gpt在 PHP 中,filter_var() 函数用于对变量进行过滤和验证,并且可以接受一个标志参数(flags),该参数的作用是控制验证的具体行为。<br />
<br />
标志参数是通过位运算(bitwise operations)来组合的,因此可以使用竖线符号 (|) 将多个标志值组合到一起。这是因为每个标志值都表示一个不同的选项,它们的值是独立的,并且可以通过位运算“组合”成一个数值。<br />
<br />
为什么可以使用 | (按位“或”运算符)?<br />
在 PHP 中,标志(flags)是使用整数值表示的,每个标志有一个唯一的二进制位。举个例子,FILTER_FLAG_IPV4 和 FILTER_FLAG_NO_PRIV_RANGE 是不同的标志,它们的整数值如下:<br />
<br />
FILTER_FLAG_IPV4 对应的值是 1(即 00000001)。<br />
FILTER_FLAG_NO_PRIV_RANGE 对应的值是 4(即 00000100)。<br />
当你用竖线符号(|)连接这两个标志时,相当于执行了按位“或”运算,这样会把两个标志合并成一个新的整数值。<br />
<br />
1 | 4 = 5(即 00000101)。<br />
因此,你可以将这两个标志值组合成一个整数 5,然后传递给 filter_var() 函数。PHP 会识别并理解这个值是组合了 FILTER_FLAG_IPV4 和 FILTER_FLAG_NO_PRIV_RANGE 两个标志的意思。<br />
<br />
示例:<br /><div class="blockcode"><div id="code_LqI"><ol><li>$IP = '8.8.8.8';<br /><li>$result = filter_var($IP, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE);</ol></div><em onclick="copycode($('code_LqI'));">复制代码</em></div><br />
在这个例子中,FILTER_FLAG_IPV4 和 FILTER_FLAG_NO_PRIV_RANGE 通过 | 操作符合并,传递给 filter_var(),这会使得函数验证 IP 地址是否为有效的 IPv4 地址,同时确保它不是私有地址。<br />
<br />
关键点总结:<br />
位运算: 每个标志有唯一的整数值,这些值的二进制表示是独立的,你可以通过 |(按位“或”运算符)将它们组合。<br />
无需担心冲突: 由于每个标志有不同的二进制位,它们可以安全地组合在一起,不会冲突。<br />
简洁和可读性: 使用 | 来组合标志能使代码简洁,避免了重复调用 filter_var() 函数。<br />
结论:<br />
你可以使用 | 来组合多个标志,达到同时满足多个条件的目的,而不会出现问题。这种做法基于位运算的原理,使得多个标志可以以一个值的形式传递给函数。
页: [1] 2
查看完整版本: 有懂php代码的吗