小编use*_*119的帖子

何时使用静态vs实例化类

PHP是我的第一个编程语言.在使用静态类和实例化对象时,我无法完全理解.

我意识到你可以复制和克隆对象.但是在我使用php的所有时间中,任何对象或函数总是最终作为单个返回(数组,字符串,整数)值或void.

我理解书中的概念,比如电子游戏角色类.复制汽车对象,并使新的一个红色,这一切都有意义,但不是它在PHP和Web应用程序中的应用程序.

一个简单的例子.一个博客.博客的哪些对象最好实现为静态或实例化对象?DB类?为什么不在全局范围内实例化db对象?为什么不让每个对象都静止呢?性能怎么样?

这一切都只是风格吗?有没有正确的方法来做这些事情?

php oop class

168
推荐指数
8
解决办法
5万
查看次数

检查PHP会话而不启动它?

是否可以检查没有启动会话的会话?

我问的原因是,我正在开发的应用程序有一个集成的管理界面.因此,当管理员登录时,他们浏览与用户相同的页面以进行编辑.字段和选项基于用户privs显示.

这导致了两个问题.

一个是因为会话正在启动,我无法启用浏览器缓存功能,因为发送的标头始终是:

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0       
Run Code Online (Sandbox Code Playgroud)

我使用smarty输出模板,并且无法实现:

$smarty->cache_modified_check = true;
Run Code Online (Sandbox Code Playgroud)

发送304未修改,因为会话已经启动.使用上面的smarty param将是我浏览器缓存的完美解决方案.

是因为每个使用该站点的人都在启动一个会话,会话目录中充满了不需要的会话.

如果用户没有登录,我可以破坏会话,但是每个页面加载,用户将创建和删除会话.这是不好的做法吗?

因此,如果我可以检查是否存在活动会话而不启动,我的所有问题都将得到解决.有任何想法吗?浏览器在请求页面时是否发送会话cookie?

理想的东西是这样的:

if (session_exists) {
 session_start();
 $users->priv = $_SESSION['priv'];
}
else {
 $users->priv = guest;
}
Run Code Online (Sandbox Code Playgroud)

---------------回应Tony Miller ---------------

使用session_id()时,您必须已经启动会话以返回id.

session_start();
echo session_id($_SESSION);
Run Code Online (Sandbox Code Playgroud)

或者您可以在调用会话开始之前为会话设置ID

session_id("adfasdf");
session_start();
echo session_id($_SESSION);

//prints "adfasdf"
Run Code Online (Sandbox Code Playgroud)

这些都不能帮助我.除非我遗漏了什么.

php session caching smarty

16
推荐指数
2
解决办法
4623
查看次数

在网页上使用印刷报价是一种好习惯吗?

最近我看到越来越多的设计文章鼓励使用印刷报价(Curly Quotes)在网页上使用直引号.

虽然我同意印刷,但正确的引用更具吸引力,并为设计添加了一个很好的触摸,我想知道从编码的角度来看它实际上是否更好.

我发现这些引号也不会在文档中复制和粘贴,也不一定要刮掉,并且最终会出现烦人的缺失字符符号.没关系,当它们被用在示例代码块中时,我讨厌它.

我对文本编码知之甚少,所以我想知道是否有人对此主题有任何建议?

"则更好或更可靠“

编辑:此问题主要适用于内容区域,其中<q><blockquote>在语义上不是最佳选项.还有像复数之类的东西.

html css xhtml encoding

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

PHP和Mysql使用复选框形式更新多对多的关系

我有很多表结构和更新复选框表单.

目标是使用users_project表将users表与projects表相关联.这样,每个项目可以有很多用户,每个用户可以有很多项目.

每个用户编辑页面上的表单看起来都是这样的

<form action="#" method="post">
    <div>   
        <input type="checkbox" name="project_id[]" id="1" value="1">
        <label for="1">project 1</label>
        <br>

        <input type="checkbox" name="project_id[]" id="2" value="2">
        <label for="2">project 2</label>
        <br>
        <input type="hidden" name="editing">
        <input type="submit" id="submit" value="submit">
    </div>
</form>
Run Code Online (Sandbox Code Playgroud)

以下是三个表的示例.

用户表

+----+-----------+
| id ¦ username  ¦
+----+-----------+
| 1  ¦ user 1    ¦
| 2  ¦ user 2    ¦
+----+-----------+
Run Code Online (Sandbox Code Playgroud)

项目表

+----+-----------+  
¦ id ¦ title     ¦
+----+-----------+  
| 1  ¦ project 1 ¦
| 2  ¦ project 2 ¦
+----+-----------+    
Run Code Online (Sandbox Code Playgroud)

user_projects表

该表基于它们的id来关联上面的两个表

+----+-------------+---------+ …
Run Code Online (Sandbox Code Playgroud)

php sql checkbox many-to-many

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

了解SPARQL是什么

这是一个非常初学者的一系列问题,但在阅读了30篇优秀的SPARQL教程之后,我似乎无法理解SPARQL是什么或如何开始使用它.

  1. 它是在客户端执行的吗?
  2. 微软是否会以某种方式搞砸了?
  3. 你能使用通用的关系数据库(SQL)吗?
  4. 是否有您推荐的特殊资源用于学习?
  5. 你觉得开始投资自己还为时过早吗?
  6. 设置和运行以开始修补的最佳方法是什么?

我见过的RDFA示例非常鼓舞人心.我目前是使用微格式的主要支持者,但我真的想更进一步.我目前使用PHP开发,但只找到了一个Java库.

php semantic-web sparql rdfa

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

学习SVN - 简单的初学者问题

刚开始使用SVN.这是我在阅读了几篇文章,教程和玩了几个小时之后的一组非常基本的问题.

  1. 当我创建一个回购时,它应该包含我的所有项目还是只有一个?在一些项目上运行导入后,我添加的每个新项目的修订计数都会增加,这似乎很奇怪.

  2. 如果我自己工作,标签和分支仍然是必要的和良好的做法?

  3. 你怎么知道何时提交一个项目?特别是从头开始写它?

  4. 在夜晚结束时,你总是承诺你的工作吗?或者你把它留下来检查?

  5. 您是否始终保留项目的导出副本?如果SVN DB borks怎么办?你能从borking恢复吗?如果它确实是bork并且我只有一个签出的副本,我是否必须自己删除所有的.svn目录?这样做会等同于导出的副本吗?您是否将导出的标签存档?

  6. 我是否需要直接访问存储库目录?隐藏这个目录会更好吗?(使用svn)

  7. 是否有更简单的方法来进行结账并导入然后输入整个文件路径(file:/// Applications/MAMP/SVN /)?我可以设置一次我将永远使用的回购吗?

编辑感谢清除所有这些问题.还有关于gui的建议.我通过textmate建立起来,令人难以置信的令人难以置信.仍然必须在CL上进行初始导入和结帐但是......

svn version-control

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

当您只进行一次选择时,使用准备好的Select语句会更好吗?

我目前正在使用PDO在PHP中编写CRUD类.

我喜欢准备语句提供的安全性,但我听说他们也阻止像mysql这样的数据库使用queryCache.

当您一次只进行一次选择时,使用准备好的Select语句会更好吗?或者只是$ pdo-> quote()就足够了安全立场(或者还有其他任何优点,比如缓存?).

我的所有更新,删除和插入都是使用预准备语句完成的.我只是对选择感到好奇.

php sql pdo prepared-statement

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

以PHP格式输入和验证自定义日期时间的最佳方法

就前端可用性和PHP DATE_TIME验证而言,这是一个双重问题.

我正在为一个想要添加项目完成日期的客户的网站工作(因此可以按顺序列出项目).他将是唯一一个使用管理界面的人,所以我希望它尽可能简单.

我将日期存储为SQLite数据库中的DATE_TIME.

我想要求客户至少输入年份和月份,并选择将日,小时,分钟,秒添加到DATE_TIME.如果未设置,则默认为最小数字.

我认为最好的方法也是最简单的方法是使输入(左)和结果(右)的单个输入形式.让他使用xxxx/xx/xx/xx/xx/xx作为格式.

2009/08       = 2009-08-01 00:00:01
2009/08/01    = 2009-08-01 00:00:01
2009/08/01/05 = 2009-08-01 05:00:01
Run Code Online (Sandbox Code Playgroud)

(默认添加一秒,否则将是前一天)

我首先尝试将输入爆炸成数组并使用正则表达式验证每个日期部分.它真的很乱,我无法弄清楚如何验证适当的范围,比如/ [1980-2009] /或/ [01-12] /(这不像我预期的那样工作).此外,/ [(0-9){2}] /显然不适用于本月.

另一个选项是使每个日期部分成为单独的选择字段.使每个字段在一个月后可选.但是在html输出中变得混乱,同样假设每个月没有31天,我需要一些javascript来改变日期字段,具体取决于选择的月份.这太多了.使用单个字段似乎也更容易,更快捷.

你们建议什么是输入和验证自定义日期时间的最佳方式?

php sqlite datetime

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