小编Mic*_*erx的帖子

是否有__toString()的等价整数

有没有办法告诉PHP如何将对象转换为int?理想情况下,它看起来像

class ExampleClass
{
    ...

    public function __toString()
    {
        return $this->getName();
    }

    public function __toInt()
    {
        return $this->getId();
    }
}
Run Code Online (Sandbox Code Playgroud)

我意识到它不支持这种确切的形式,但有一个简单(不那么hacky)的解决方法吗?

----------------------编辑编辑编辑------------------------- ----

谢谢大家!我正在研究的主要原因是我想制作一些类(表单生成器,菜单类等)使用对象而不是数组(uniqueId => description).如果您认为它们只应该与这些对象一起使用,或者只对那些扩展某种通用对象超类的对象起作用,那么这很容易.

但我试图看看是否存在中间道路:理想情况下,我的框架类可以接受整数字符串对,或者接受带有getId()和getDescription()方法的对象.因为在我想使用stackoverflow的综合知识来确定是否有一种标准/最佳实践方法与php标准库不冲突之前,这是其他人必须要发生的事情,所以框架等.

php

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

postgresql中的外键可能被触发器违反

我在postgres中创建了一些表,从一个表添加了一个外键到另一个表,并将ON DELETE设置为CASCADE.奇怪的是,我有一些字段似乎违反了这个约束.

这是正常的行为吗?如果是这样,有没有办法获得我想要的行为(没有违规行为)?

编辑:

我只是使用创建外键作为CREATE TABLE的一部分

... REFERENCES product (id) ON UPDATE CASCADE ON DELETE CASCADE
Run Code Online (Sandbox Code Playgroud)

当前代码pgAdmin3给出的是

ALTER TABLE cultivar
  ADD CONSTRAINT cultivar_id_fkey FOREIGN KEY (id)
      REFERENCES product (id) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE CASCADE;
Run Code Online (Sandbox Code Playgroud)

编辑2:

为了澄清,我有一种潜在的怀疑,即只有在更新/插入发生时才会检查约束,但之后再也不会再查看.不幸的是,我对postgres知之甚少,以确定这是否属实,或者如果没有运行这些检查,字段可能会在数据库中结束.

如果是这种情况,有没有办法检查所有外键并解决这些问题?

编辑3:

有问题的触发器可能导致约束违规,请参见下文

postgresql foreign-keys

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

PyQt:如何将光标重置为悬停在其上的任何内容

非常小的问题:

我已经编写了一个带有基于QPlainTextEdit的文本编辑小部件的小型IDE.当您将鼠标移到它上面时,光标将按预期变为插入/文本光标.如果按F5键,则会禁用该窗口并运行一个小脚本,然后重新启用该窗口,并为该文本区域提供焦点.

不知何故,这会将光标从文本光标更改为指针.如果将光标移出文本区域然后再返回到文本区域,则会再次变为文本光标.

有没有办法以编程方式触发此刷新操作?


更新:似乎与进度条有关:

#!/usr/bin/env python
import sys
import time
from PyQt4 import QtGui, QtCore
from PyQt4.QtCore import Qt

class TinyIDE(QtGui.QMainWindow):

    def __init__(self, filename=None):
        super(TinyIDE, self).__init__()
        self.setWindowTitle('Tiny IDE test')

        # Add menu item
        menu = self.menuBar()
        menu_run = menu.addMenu('&Run')
        tool_run = QtGui.QAction('&Run', self)
        tool_run.setShortcut('F5')
        tool_run.triggered.connect(self.action_run)
        menu_run.addAction(tool_run)

        # Add editor
        self._editor = QtGui.QPlainTextEdit()
        self._editor.setPlainText('Press F5 to run')
        self.setCentralWidget(self._editor)
        self._editor.setFocus()

    def action_run(self):
        pbar = None
        try:
            self.setEnabled(False)

            pbar = QtGui.QProgressDialog('Running script', 'Cancel', 0, 10)
            pbar.setWindowModality(Qt.WindowModal)
            pbar.setAutoClose(False)
            pbar.setAutoReset(False)
            pbar.show()

            for i in …
Run Code Online (Sandbox Code Playgroud)

qt pyqt cursor qplaintextedit

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

从PDO预处理语句中检索(或模拟)完整查询

我两年前偶然发现了这个问题.

有没有办法在预准备语句上调用PDOStatement :: execute()时获取原始SQL字符串?出于调试目的,这将非常有用.

获胜的答案说明了这一点

[...]如果设置PDO属性PDO :: ATTR_EMULATE_PREPARES,您也可以获得所需的内容.在此模式下,PDO将参数插入到SQL查询中,并在执行()时发送整个查询.

但它没有提到如何获得结果查询字符串.我知道这是一个糟糕的主意,但在调试模式下这并不会让我感到困扰.有人知道怎么做这个吗?

PS如果有某种方式我可以重新开放/引起对原来两年前主题的关注,而不是打开一个新主题,请告诉我.

php pdo prepared-statement

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

手动插入带有主键序列的postgres表

我在生命中第一次将MySQL表转换为PostgreSQL,并遇到了没有auto_increment的传统新手问题.

现在我发现postgres解决方案是使用一个序列,然后在每次插入时请求此序列的nextval()作为默认值.我还读过SERIAL类型自动创建序列和主键,即使在内部事务中调用时,nextval()也会递增计数器,以避免锁定序列.

我无法解决的问题是当您使用UNIQUE或PRIMARY约束以及序列的nextval()作为默认值手动将值插入到字段中时会发生什么.据我所知,当序列达到该值时,这会导致INSERT失败.

是否有一种简单(或常见)的​​方法来解决这个问题?

非常感谢明确的解释.

更新:如果你觉得我不应该这样做,永远无法解决这个问题或者做出一些有缺陷的假设,请随时在你的答案中指出它们.最重要的是,请告诉我该怎么做,为程序员提供一个稳定而强大的数据库,不会被简单的插入损坏(最好不要隐藏存储过程后面的所有内容)

postgresql primary-key sequence

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

允许Ctrl-C中断python C扩展

我在(自制的)基于C的python扩展中运行一些计算量很大的模拟.偶尔我会弄错,想终止模拟.但是,Ctrl-C似乎没有任何效果(除了打印^C到屏幕,所以我必须使用kill或系统监视器终止进程.

据我所知,python只是等待C扩展完成,并且在此期间并没有真正与它通信.

有没有办法让这项工作?

python linux python-c-api

12
推荐指数
3
解决办法
2560
查看次数

在python中,有一个静态等价于isinstance吗?

我想扫描一个模块(使用dir())并提取type扩展某个父类的类的所有类名(对象).有没有办法在没有首先创建我可以检查的实例的情况下执行此操作isinstance()

python inheritance static isinstance

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