小编bar*_*024的帖子

PHP构造函数和静态函数

关于构造函数在PHP中如何工作,我有点困惑.

我有一个带有构造函数的类,当我实例化一个新对象时会调用它.

$foo = new Foo($args);
Run Code Online (Sandbox Code Playgroud)

__construct($params)在类中调用Foo它并执行适当的初始化代码.

但是,当我使用该类调用静态函数时,将再次调用构造函数.

$bar = Foo::some_function(); //runs the constructor from Foo
Run Code Online (Sandbox Code Playgroud)

这会导致构造函数执行,运行我打算仅在创建新Foo对象时使用的对象初始化代码.

我是否忽略了构造函数的工作原理?或者有什么方法可以防止__construct()在我使用类进行静态函数调用时执行?

我应该使用"工厂"功能来进行对象初始化吗?如果是这样,构造函数的重点是什么呢?

::编辑::我有一个表单,用户可以将照片上传到相册(create_photo.php)和他们可以查看相册的区域(view_photos.php).提交表格时:

$photo = new Photo($_FILES['photo'], $_POST['arg1'], ect..);
Run Code Online (Sandbox Code Playgroud)

Photo构造函数创建并保存照片.但是在view_photo.php中,当我打电话时:

$photo = Photo::find_by_id($_POST['id']) //user-defined function to query database
Run Code Online (Sandbox Code Playgroud)

这导致Photo的构造函数运行!

php constructor static-functions

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

Mysql查询SELECT DISTINCT月/年

我正在努力为这一个找到正确的mysql查询...

我有一个名为'blog'的表,里面有博客条目.每个条目都有一个名为"created"的日期时间列(YYYY-MM-DD HH:MM:SS).我想在我的页面边栏上列出所有不同的月份 - 其中写入条目,以便用户可以轻松地从博客存档中找到较旧的条目.

我有一个用户定义的函数,我的BlogEntry类用它来查询数据库.根据查询,它返回一个记录数组.例如...

$entries = BlogEntry::find_by_sql("SELECT * FROM blog ORDER BY created DESC");
Run Code Online (Sandbox Code Playgroud)

我可以使用什么查询来仅返回写入条目的不同月份?

我尝试了一些事情(没有运气),例如:

$months = BlogEntry::find_by_sql("SELECT DISTINCT MONTH(created) FROM blog");
Run Code Online (Sandbox Code Playgroud)

任何有关如何返回不同月份和年份的想法或建议将不胜感激!

更新:也许我的问题是如何显示返回的记录.我一直在尝试以下......

<ul>
<?php foreach($months as $month): ?>
<li><?php echo $month->created; ?></li>
<?php endforeach; ?>
</ul>
Run Code Online (Sandbox Code Playgroud)

我知道这看起来不对.我怎么能合成它来列出Month-YYYY?

php mysql

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

标签 统计

php ×2

constructor ×1

mysql ×1

static-functions ×1