GVKun编程网logo

PHP的5 strpos()返回0和false之间的区别?(php return false)

11

在本文中,我们将带你了解PHP的5strpos在这篇文章中,我们将为您详细介绍PHP的5strpos的方方面面,并解答返回0和false之间的区别?常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更

在本文中,我们将带你了解PHP的5 strpos在这篇文章中,我们将为您详细介绍PHP的5 strpos的方方面面,并解答返回0和false之间的区别?常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的$ .post和$ .ajax之间的区别?、asp.net – AutopostBack = True和AutoPostBack = False之间的区别?、C ++ string ==和compare()之间的区别?、c# – GetHostEntry和GetHostByName之间的区别?

本文目录一览:

PHP的5 strpos()返回0和false之间的区别?(php return false)

PHP的5 strpos()返回0和false之间的区别?(php return false)

if(strpos("http://www.example.com”,”http://www.")==0){ // do work}

我希望这能解决,但确实如此。但是当我这样做时会发生什么

if(strpos("abcdefghijklmnop","http://www.")==0){// do work}

这也传递到php 5上,因为据我所知,strpos返回false,它转换为0。

这是正确的思想/行为吗?如果是这样,在另一个字符串的开头测试该子字符串的解决方法是什么?

答案1

小编典典

是的,这是正确的/预期的行为:

  • strpos``0字符串开头有匹配项时可以返回
  • false如果没有匹配项,它将返回

问题是你不应该==用来比较0false;您应该这样使用===

if(strpos("abcdefghijklmnop","http://www.") === 0) {}

要么 :

if(strpos("abcdefghijklmnop","http://www.") === false) {}

有关更多信息,请参见比较运算符:

  • $a == $bTRUE如果$a等于$b
  • $a === $bTRUE如果$a等于$b,和 它们是相同类型的

并且,引用以下手册的页面strpos

这个函数可以返回布尔 FALSE,也可以返回其评估到非布尔值 FALSE,例如0""
请阅读布尔值部分以获取更多信息。
使用该===
运营商的测试此函数的返回值。

$ .post和$ .ajax之间的区别?

$ .post和$ .ajax之间的区别?

好奇是否有人知道关于data参数的区别。

我有一种$.post方法,将a $('#myform').serialize()作为我的数据参数即可工作。

如果我使用这种$.ajax()方法尝试相同的操作,则不会成功,因为我的数据参数似乎不正确。

有谁知道区别,我可能会用什么代替上面的.serialize

asp.net – AutopostBack = True和AutoPostBack = False之间的区别?

asp.net – AutopostBack = True和AutoPostBack = False之间的区别?

AutopostBack = True和AutopostBack = False之间的区别?
在接受采访时,他们向我问了这个问题,
你可以向我解释一下吗

解决方法

Autopostback是页面将被发布的机制
根据Web控件中的某些事件自动返回服务器。在一些Web控件中,属性称为自动发回。

如果设置为true,则在控件中发生事件时,会将请求发送到服务器。

无论何时在任何控件中将autopostback属性设置为true,.NET框架将自动将几个代码插入到生成的HTML中以实现此功能。

>一个名为__doPostBack(eventtarget,eventargument)的Java脚本方法>两个名为__EVENTTARGET和__EVENTARGUMENT的隐藏变量> OnChange JavaScript事件到控件

C ++ string ==和compare()之间的区别?

C ++ string ==和compare()之间的区别?

我刚读了一些关于使用的建议

std::string s = get_string();
std::string t = another_string();

if( !s.compare(t) ) 
{

代替

if( s == t )
{

我几乎总是使用最后一个,因为我已经习惯了它,它感觉自然,更具可读性。 我甚至不知道有一个单独的比较功能。 更确切地说,我认为==会调用compare()。

有什么区别? 在哪种情况下,一种方式应该受到另一种方式的青睐?

我只考虑我需要知道字符串是否与另一个字符串相同的情况。


#1楼

这里没有涉及的一件事是,它取决于我们将字符串与c字符串,c字符串与字符串或字符串与字符串进行比较。

一个主要的区别是,为了比较两个字符串,在进行比较之前检查大小相等,这使得==运算符比比较更快。

这是我在g ++ Debian 7上看到的比较

// operator ==
  /**
   *  @brief  Test equivalence of two strings.
   *  @param __lhs  First string.
   *  @param __rhs  Second string.
   *  @return  True if @a __lhs.compare(@a __rhs) == 0.  False otherwise.
   */
  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
           const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { return __lhs.compare(__rhs) == 0; }

  template<typename _CharT>
    inline
    typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, bool>::__type
    operator==(const basic_string<_CharT>& __lhs,
           const basic_string<_CharT>& __rhs)
    { return (__lhs.size() == __rhs.size()
          && !std::char_traits<_CharT>::compare(__lhs.data(), __rhs.data(),
                            __lhs.size())); }

  /**
   *  @brief  Test equivalence of C string and string.
   *  @param __lhs  C string.
   *  @param __rhs  String.
   *  @return  True if @a __rhs.compare(@a __lhs) == 0.  False otherwise.
   */
  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator==(const _CharT* __lhs,
           const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { return __rhs.compare(__lhs) == 0; }

  /**
   *  @brief  Test equivalence of string and C string.
   *  @param __lhs  String.
   *  @param __rhs  C string.
   *  @return  True if @a __lhs.compare(@a __rhs) == 0.  False otherwise.
   */
  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
           const _CharT* __rhs)
    { return __lhs.compare(__rhs) == 0; }

#2楼

在内部,string :: operator ==()使用string :: compare()。 请参考: CPlusPlus - String :: Operator ==()

我写了一个小应用程序来比较性能,显然如果你在调试环境中编译和运行你的代码,String :: compare()比string :: operator ==()略快。 但是,如果您在Release环境中编译并运行代码,则两者都非常相似。

仅供参考,为了得出这样的结论,我进行了1,000,000次迭代。

为了在调试环境中证明为什么string :: compare更快,我去了程序集,这里是代码:

DEBUG BUILD

字符串::运算符==()

        if (str1 == str2)
00D42A34  lea         eax,[str2]  
00D42A37  push        eax  
00D42A38  lea         ecx,[str1]  
00D42A3B  push        ecx  
00D42A3C  call        std::operator==<char,std::char_traits<char>,std::allocator<char> > (0D23EECh)  
00D42A41  add         esp,8  
00D42A44  movzx       edx,al  
00D42A47  test        edx,edx  
00D42A49  je          Algorithm::PerformanceTest::stringComparison_usingEqualOperator1+0C4h (0D42A54h)  

字符串::比较()

            if (str1.compare(str2) == 0)
00D424D4  lea         eax,[str2]  
00D424D7  push        eax  
00D424D8  lea         ecx,[str1]  
00D424DB  call        std::basic_string<char,std::char_traits<char>,std::allocator<char> >::compare (0D23582h)  
00D424E0  test        eax,eax  
00D424E2  jne         Algorithm::PerformanceTest::stringComparison_usingCompare1+0BDh (0D424EDh)

你可以在string :: operator ==()中看到它必须执行额外的操作(添加esp,8和movzx edx,al)

发布

字符串::运算符==()

        if (str1 == str2)
008533F0  cmp         dword ptr [ebp-14h],10h  
008533F4  lea         eax,[str2]  
008533F7  push        dword ptr [ebp-18h]  
008533FA  cmovae      eax,dword ptr [str2]  
008533FE  push        eax  
008533FF  push        dword ptr [ebp-30h]  
00853402  push        ecx  
00853403  lea         ecx,[str1]  
00853406  call        std::basic_string<char,std::char_traits<char>,std::allocator<char> >::compare (0853B80h)  

字符串::比较()

            if (str1.compare(str2) == 0)
    00853830  cmp         dword ptr [ebp-14h],10h  
    00853834  lea         eax,[str2]  
    00853837  push        dword ptr [ebp-18h]  
    0085383A  cmovae      eax,dword ptr [str2]  
    0085383E  push        eax  
    0085383F  push        dword ptr [ebp-30h]  
    00853842  push        ecx  
00853843  lea         ecx,[str1]  
00853846  call        std::basic_string<char,std::char_traits<char>,std::allocator<char> >::compare (0853B80h)

两个汇编代码都非常相似,因为编译器执行优化。

最后,在我看来,性能提升可以忽略不计,因此我真的会让开发人员决定哪一个是首选的,因为两者都达到了相同的结果(特别是当它是发布版本时)。


#3楼

在Visual Studio 2012调试器中,检查字符串时,只有以下方法正常工作:

strcmp(somestring.c_str(),"")==0

返回true。

somestring.compare("") 

返回1,和

somestring=="" 

return:no运算符“==”匹配这些操作数。

somestring.c_str()==""

return:发生了未指定的错误。


#4楼

假设考虑两个字符串s和t。
给他们一些价值。
当您使用(s == t)比较它们时,它返回一个布尔值(true或false,1或0)。
但是当使用s.compare(t)进行比较时,表达式返回一个值
(i) 0 - 如果s和t相等
(ii) <0 - 如果s中的第一个不匹配字符的值小于t的值,或者s的长度小于t的长度。
(iii) > 0 - 如果t中第一个不匹配字符的值小于s的值,或者t的长度小于s的长度。


#5楼

compare有比较子串的重载。 如果你要比较整个字符串,你应该只使用==运算符(无论是否调用compare都是无关紧要的)。

c# – GetHostEntry和GetHostByName之间的区别?

c# – GetHostEntry和GetHostByName之间的区别?

在 MSDN,它提到GetHostByName已过时.替换是GetHostEntry.它们有什么区别?

解决方法

看起来像GetHostEntry做了更多的错误检查,也支持 Network Tracing

GetHostByName已解压缩:

public static IPHostEntry GetHostByName(string hostName)
{
  if (hostName == null)
    throw new ArgumentNullException("hostName");
  Dns.s_DnsPermission.Demand();
  IPAddress address;
  if (IPAddress.TryParse(hostName,out address))
    return Dns.GetUnresolveAnswer(address);
  else
    return Dns.InternalGetHostByName(hostName,false);
}

GetHostEntry已解压缩:

public static IPHostEntry GetHostEntry(string hostNameOrAddress)
{
  if (Logging.On)
    Logging.Enter(Logging.sockets,"DNS","GetHostEntry",hostNameOrAddress);
  Dns.s_DnsPermission.Demand();
  if (hostNameOrAddress == null)
    throw new ArgumentNullException("hostNameOrAddress");
  IPAddress address;
  IPHostEntry ipHostEntry;
  if (IPAddress.TryParse(hostNameOrAddress,out address))
  {
    if (((object) address).Equals((object) IPAddress.Any) || ((object) address).Equals((object) IPAddress.IPv6Any))
      throw new ArgumentException(SR.GetString("net_invalid_ip_addr"),"hostNameOrAddress");
    ipHostEntry = Dns.InternalGetHostByAddress(address,true);
  }
  else
    ipHostEntry = Dns.InternalGetHostByName(hostNameOrAddress,true);
  if (Logging.On)
    Logging.Exit(Logging.sockets,(object) ipHostEntry);
  return ipHostEntry;
}

今天关于PHP的5 strpos返回0和false之间的区别?的介绍到此结束,谢谢您的阅读,有关$ .post和$ .ajax之间的区别?、asp.net – AutopostBack = True和AutoPostBack = False之间的区别?、C ++ string ==和compare()之间的区别?、c# – GetHostEntry和GetHostByName之间的区别?等更多相关知识的信息可以在本站进行查询。

本文标签: