我希望我的类有一个静态指针指向动态分配的内存区域.我理解如何初始化它 - 在我的情况下,我将在第一个对象需要它时初始化它.但是,我不知道在代码中何时/何处释放它.我想在程序终止时释放它.
我可能能够在我的对象的析构函数中释放指针,但是我必须维护一个对象计数,以查看当对象是最后使用的对象时是否可以安全释放.
有没有更优雅的方式来做到这一点?
请告诉我.
谢谢,jbu
我正在尝试使用perl解析以下HTML结构.我需要选择包含类消息的所有dd元素以及id.我希望脚本要做的就是循环遍历所有dd元素并打印出dd元素的id,但它需要忽略第一个dd元素,因为它是静态的并且不会改变.
它可以与任何perl模块一起使用,只要它可以从cpan安装,以方便我.我对perl和解析html没有多少经验,所以任何指针都会非常有用.
谢谢 :)
HTML结构:
<pre><code>
<html>
<head>
</head>
<body>
.....other elements
<div id="messages">
<div class="header"></div>
<dl>
<dd class="message unread mc-friend mc-message">This is just a random message, do not parse</dd>
<dd id="msg2" class="message unread mc-message">
Hello
</div>
<dd id="msg3" class="message unread mc-message">
Hello
</dd>
</dl>
</div>
</body>
</html>
</pre></code>
Run Code Online (Sandbox Code Playgroud) 我在服务器上,我只限于PHP 5.2.6,这意味着我无法使用str_getcsv.我正在使用,而不是fgetcsv,它需要"一个有效的文件指针,指向由fopen(),popen()或fsockopen()成功打开的文件." 操作.
我的问题是:有没有办法将字符串作为文件句柄访问?
我的另一个选择是将字符串写入文本文件然后通过fopen()
然后使用来访问它fgetcsv
,但我希望有一种方法可以直接执行此操作,例如在perl中.
完整的问题应该是"这是正确的还是我不能指望的一些错误?"
为什么这是正确的行为?
我一直在使用PDO,尤其是直接将数据提取到对象中.这样做我发现了这个:
如果我直接将数据提取到这样的对象:
$STH = $DBH->prepare('SELECT first_name, address from people WHERE 1');
$obj = $STH->fetchAll(PDO::FETCH_CLASS, 'person');
Run Code Online (Sandbox Code Playgroud)
并有一个像这样的对象:
class person {
public $first_name;
public $address;
function __construct() {
$this->first_name = $this->first_name . " is the name";
}
}
Run Code Online (Sandbox Code Playgroud)
它告诉我在调用__construct之前正在分配属性 - 因为名称都附加了"是名称".
这是一些错误(在这种情况下,我不能/不会指望它)或这是它应该是的方式.因为它目前的工作方式真的很不错.
显然,据其中一位维护者说,这不是一个bug.有人在2008年将其作为一个错误发布,回复是"它不是一个错误,阅读文档".
但是,我真的很想知道为什么这是正确的行为.
我正在使用mySQL开发基于Web的应用程序,我过去曾经使用过它.在开发过程中,我从未见过mySQL错误 - 即.形式不佳的选择 - 但一旦它'工作'有什么样的错误?
我从未见过插入或选择失败 - 他们可以吗?如果语法正确,为什么会这样?
我大多问这个问题,目的是弄清楚如果错误确实发生了怎么办.如果插入/更新失败,我会睡一秒再试一次吗?选择怎么样?在放弃之前多少次?
编辑:也许我问这个很糟糕,我正在寻找的是"如果我们出现问题,我该如何处理我的SQL错误?".在每个样本中,我都看到它只是死了 - 在一个看似非常难看的公共应用程序中.是否值得在几秒钟内重试该命令,然后向用户发送错误并通过电子邮件发送给管理员?或者只是接受致命错误无法修复.
我有一个特定顺序的项目列表,所以我决定将它们存储在一个数组中
$items = array(
"apple",
"banana",
"pear"
);
Run Code Online (Sandbox Code Playgroud)
如果使用参数"banana"调用程序,我需要能够说出"apple"之前和"pear"之后.目前我正在做这样的事情:
foreach($items as $k=>$v) { if ($v == "banana") { $current_key = $k }
Run Code Online (Sandbox Code Playgroud)
所以现在我知道$ current_key -1是先前的,而+1是下一个.它可以工作,只是感觉难以迭代整个数组.有一个更好的方法吗?
更新 如果有人关心,我决定做一些快速测试,看看获取信息的方式有多快.超过1000次迭代,在6000个项目的数组上,microtime重新调整:
我发布的方式:4.567 Array_Search:2.749
虽然我在想我也尝试了一种方法,将数据存储在一个数组数组中,如:
$items['banana']['next'] = 'pear';
$items['banana']['prev'] = 'apple';
Run Code Online (Sandbox Code Playgroud)
当然,这是英里(0.0005)的胜利者.这些都不是真的相关,我只是很好奇并且想与任何阅读此内容的人分享.
php ×4
arrays ×1
c++ ×1
csv ×1
destructor ×1
filehandle ×1
free ×1
html ×1
html-parsing ×1
memory ×1
mysql ×1
pdo ×1
perl ×1
static ×1