关于构造函数在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的构造函数运行!
我正在努力为这一个找到正确的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?