小编Phi*_*ber的帖子

PHP中的语言构造和"内置"函数有什么区别?

我知道include,isset,require,print,echo,和其他一些人都没有的功能,但语言结构.

其中一些语言结构需要括号,而其他语言结构则不需要.

require 'file.php';
isset($x);
Run Code Online (Sandbox Code Playgroud)

有些有返回值,有些则没有.

print 'foo'; //1
echo  'foo'; //no return value
Run Code Online (Sandbox Code Playgroud)

那么语言结构和内置函数之间的内部差异是什么?

php function language-construct built-in

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

MySQL:ALTER IGNORE TABLE给出"完整性约束违规"

我正在尝试使用ALTER IGNORE TABLE + UNIQUE KEY从MySQL表中删除重复项.MySQL文档说:

IGNORE是标准SQL的MySQL扩展.如果新表中的唯一键上存在重复项,或者启用了严格模式时出现警告,它将控制ALTER TABLE的工作方式.如果未指定IGNORE,则复制将中止并在发生重复键错误时回滚.如果指定了IGNORE,则只使用第一行在唯一键上具有重复项的行.其他冲突的行将被删除.不正确的值将截断为最接近的匹配可接受值.

当我运行查询时......

ALTER IGNORE TABLE table ADD UNIQUE INDEX dupidx (field)
Run Code Online (Sandbox Code Playgroud)

...我仍然收到错误#1062 - 关键'dupidx'重复输入'blabla'.

mysql unique-constraint

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

在Doctrine 2.0实体中使用EntityManager

我有2个实体:Country(id,name)和Mapping(id,object,internalId,externalId).国家和地图未与关联相关联(因为"映射"不仅包含国家/地区的行).我需要使用以下条件获取国家/地区的外部ID:

  • country.id = mapping.internalId
  • mapping.object = 'country'

所以我计划在Country中添加函数getExternalId()

function getExternalId() {
    $em = Registry::getEntityManager();

    $mapping = $em->getRepository('Mapping')->findOneBy(array(
        'object'     => 'country',
        'internalId' => $this->getId()
    ));

    return !empty($mapping) ? $mapping->getExternalId() : false;
}
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 在实体中使用EntityManager是一种好习惯吗?如果不是,请解释如何在我的情况下获得外部身份证?
  2. 也许可以使用yaml文件关联Country和Mapping?

提前致谢!

entitymanager doctrine-orm

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

PHP 5.3中的接口/抽象类的命名(使用命名空间)

在PHP 5.3之前,我曾经将接口/抽象类命名为:

abstract class Framework_Package_Subpackage_Abstract {}
Framework/Package/Subpackage/Abstract.php

interface Framework_Package_Subpackage_Interface {}
Framework/Package/Subpackage/Interface.php
Run Code Online (Sandbox Code Playgroud)

现在使用PHP 5.3并使用命名空间我不能再使用我的约定了,因为interfaceabstract是保留的关键字.

namespace Framework\Package\Subpackage;
abstract class Abstract {}
Framework/Package/Subpackage/Abstract.php

namespace Framework\Package\Subpackage;
interface Interface {}
Framework/Package/Subpackage/Interface.php
Run Code Online (Sandbox Code Playgroud)

那么,我应该如何命名我的类/接口呢?

php namespaces naming-conventions

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

我应该为多字节字符串使用mb_*或iconv_*函数吗?

就像我们现在一样,在PHP中处理多字节字符串并不容易.例如,我想得到以下字符串的长度:ä

strlen('ä'); // 2, because ä equals 2 bytes
mb_strlen('ä', 'UTF-8'); // 1
iconv_strlen('ä', 'UTF-8'); // 1
Run Code Online (Sandbox Code Playgroud)

我应该使用哪些功能?mb_*或iconv_*?为什么?考虑到编码可能不限于UTF-8.

Thx提前!

php unicode iconv multibyte

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