小编web*_*.pl的帖子

PHP工作流程 - 执行函数的顺序

我想知道PHP引擎解释函数声明的顺序.我不知道为什么某些PHP显示调用未定义的函数致命错误和somethimes解释器看到函数没有问题.

我们假设我的代码是:

echo theRest(4,3);

function theRest($a, $b)
{
   return $a % $b;
}
Run Code Online (Sandbox Code Playgroud)

看到调用后声明了该函数,这是正常的.这意味着PHP在解释之前读取整个文件?

另一个例子:

echo theRest(4,3);

include('test2.php');
Run Code Online (Sandbox Code Playgroud)

test2.php

function theRest($a, $b)
{
    return $a % $b;
}
Run Code Online (Sandbox Code Playgroud)

这里我得到致命错误:调用未定义函数theRest().这是为什么?

php workflow execution

14
推荐指数
2
解决办法
5315
查看次数

PHP如何使用静态类的魔术方法?

我正在尝试将数组转换为对象.我想使用魔术方法 - 带有静态属性的__get和__set.

我的代码:

class UserData {
    private static  $id, $name, $login;

    public function __get($var)
    {
        return self::$var;
    }
    public function __set($var, $val)
    {
        self::{$var} = $val;
    }
}
Run Code Online (Sandbox Code Playgroud)

并设置:

foreach($userArray as $key => $val) 
    {
        DaneBilingowe::${$key} = $val;
    }
Run Code Online (Sandbox Code Playgroud)

错误:致命错误:无法访问私有属性UserData :: $ id

是否可以使用具有静态属性的魔术方法?

php static class

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

设置产品的Magento下拉列表(选择)值

我创建了一个非常大的导入脚本,它将产品从CSV导入到magento.我还有一个要解决的问题.

我使用下拉列表来表示属性.不幸的是,我无法为单个产品设置这些属性的值.我做了什么:

  • 创建属性集[php],
  • 为此set [php]添加了带有值的下拉属性,
  • 在适当的属性集中添加了新产品,并尝试为我创建的属性设置值.

我尝试了几种方法,这是一个看起来对我好的方法:

private function setOrAddOptionAttribute($product, $arg_attribute, $arg_value) {
    $attribute_model = Mage::getModel('eav/entity_attribute');
    $attribute_options_model = Mage::getModel('eav/entity_attribute_source_table');

    $attribute_code = $attribute_model->getIdByCode('catalog_product', $arg_attribute);

    $attribute = $attribute_model->load($attribute_code);

    $attribute_options_model->setAttribute($attribute);
    $options = $attribute_options_model->getAllOptions(false);

    // determine if this option exists
    $value_exists = false;
    foreach($options as $option) {
        if ($option['label'] == $arg_value) {
            $value_exists = true;
            break;
        }
    }

    // if this option does not exist, add it.
    if (!$value_exists) {
        $attribute->setData('option', array(
            'value' => array(
                'option' => array($arg_value,$arg_value)
            )
        ));
        $attribute->save();
    } …
Run Code Online (Sandbox Code Playgroud)

php attributes magento

6
推荐指数
2
解决办法
8885
查看次数

PHP正则表达式性能

我必须从字符串中取出一些数据.不幸的是,数据的格式非常不友好.我不得不在单独的preg_replace中创建大约15个regural表达式.值得一提的是,它们内部有很多OR(|).我的问题是我最终应该做什么:将所有表达式合并为一个并使用|将它们分开 或保留原样 - 在个人preg_replace?

创建其他表达式以保持清晰度是非常糟糕的做法吗?我想也许我可以将一些表达结合到一个表达中,但它们变得非常复杂而且不能理解.

例如,我有:

$itemFullName = preg_replace("@^\b(([a-zA-Z]{1,3})?[0-9]{1,2}(\.|\-|X)[0-9]{1,2}(\s|\.|\-)?(X|x)?\s?[0-9]{1,3}\.?(([0-9]{1,3})?(X[0-9]{1,3})|(\s[0-9]\/[0-9]|\/[0-9]{1,3}))?(\s\#[0-9]{1,3}\/[0-9]{1,3})?)\s@", ' ', $itemFullName, -1, $sum);
Run Code Online (Sandbox Code Playgroud)

php regex preg-replace

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

无法使用try-catch处理SQL异常

我正在创建相当大的导入脚本.我想看到任何有问题的(未执行的)SQL查询.使用try-catch PHP块捕获错误的SQL查询时遇到问题.

我有一个问题:

SELECT id FROM tag WHERE name IN ()
Run Code Online (Sandbox Code Playgroud)

当然它有一个错误,所以我想用这段代码打印这样的查询:

$sql = "SELECT id FROM tag WHERE name ".$tagsSql."";

try
{
    $query = mysqli_query($this->mysqli, $sql);
    $result = $query->fetch_assoc();
}
catch(Exception $e)
{
    echo 'Problem with: '.$sql;
    print_r($e); die;
}
Run Code Online (Sandbox Code Playgroud)

运行脚本时,PHP只会抛出这个:

Fatal error: Call to a member function fetch_assoc() on a non-object in C:\www\blackboard-import\index.php on line 227
Run Code Online (Sandbox Code Playgroud)

为什么没有抓住这个错误?因为这是致命的?我该如何处理这种情况?我使用mysqli与MySQL联系.

php mysql sql mysqli try-catch

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

PHP优化使用file_put_contents函数

我正在查询数据库,然后使用file_put_contents()将返回的数据存储到XML文件中.我想知道调用这个函数的方法更好.请注意,$ data是大数组,变量$ rss在这种情况下可以包含一个大字符串.

起初我实现了这样的事情:

foreach($data as $item)
{
    $rss .= '<title>'.getTitle($item['id']).'</title>';
    $rss .= '<data>'.getData($item['id']).'</data>.';
    file_put_contents($this->fileRss, $rss);
    unset($rss);
}
Run Code Online (Sandbox Code Playgroud)

然后我改为:

foreach($data as $item)
{
    $rss .= '<title>'.getTitle($item['id']).'</title>';
    $rss .= '<data>'.getData($item['id']).'</data>.';
}

file_put_contents($this->fileRss, $rss);
Run Code Online (Sandbox Code Playgroud)

哪种方式更好?制作一个大的,大的变量$ rss,然后保存它或每次保存很小的变量?我不确定,但我认为IO操作比内存操作慢,所以第一种方式更好.唯一的问题可能是内存限制.

php io performance

0
推荐指数
1
解决办法
2254
查看次数