Понял. Поскольку я не программист, я понятия не имею, является ли это хорошим решением.
// start dispatch
if( $colname == 'dispatch' ) {
// get items from the order global object
$order_itemss = $the_order->get_items();
// The orders date
$order_date = $the_order->order_date;
// The order date + 8-10 days
$order_date_8d = date_i18n( 'D j M', strtotime( $order_date ) + ( 8 * 24 * 60 * 60 ) );
$order_date_10d = date_i18n( 'D j M', strtotime( $order_date ) + ( 10 * 24 * 60 * 60 ) );
if ( !is_wp_error( $order_itemss ) ) {
foreach( $order_itemss as $order_itemm ) {
echo $order_date_8d .' - '. $order_date_10d;
}
// end foreach
}
// end if
}
// end dispatch
Не для сложной части. Заставить его работать только с рабочими днями ...
С наилучшими пожеланиями
Магнус
Для следования тому, что сказанный [don.neufeld.myopenid.com], это не только мелкая копия, но и это, или (выберите) утечку памяти или висячий указатель.
// memory leak (note that the pointer is never deleted)
class A
{
B *_b;
public:
A()
: _b(new B)
{
}
};
// dangling ptr (who deletes the instance?)
class A
{
B *_b;
public:
A()
... (same as above)
~A()
{
delete _b;
}
};
Для разрешения этого существует несколько методов.
Всегда реализуйте конструктора копии и оператор = в классах, которые используют необработанные указатели памяти.
class A
{
B *_b;
public:
A()
... (same as above)
~A()
...
A(const A &rhs)
: _b(new B(rhs._b))
{
}
A &operator=(const A &rhs)
{
B *b=new B(rhs._b);
delete _b;
_b=b;
return *this;
};
Само собой разумеется, это - сильная боль и существует довольно много тонкости для разбираний. Я даже не полностью уверен, что сделал это прямо здесь, и я сделал это несколько раз. Не забывайте, что необходимо скопировать всех участников - если Вы добавляете некоторые новые позже, не забывайте включать их также!
Сделайте конструктора копии и оператор = частными в Вашем классе. Это - "блокировка дверь" решение. Это является простым и эффективным, но иногда защитным.
class A : public boost::noncopyable
{
...
};
Никогда не используйте необработанные указатели. Это просто и эффективно. Существует много опций здесь:
Пример:
// uses shared_ptr - note that you don't need a copy constructor or op= -
// shared_ptr uses reference counting so the _b instance is shared and only
// deleted when the last reference is gone - admire the simplicity!
// it is almost exactly the same as the "memory leak" version, but there is no leak
class A
{
boost::shared_ptr<B> _b;
public:
A()
: _b(new B)
{
}
};
Да, это - мелкая копия. У Вас теперь есть две копии s (один в вызывающей стороне, один на стеке в качестве параметра), каждый, которые содержат указатель на тот же самый блок памяти.
У Вас будет две копии s
структура, каждый из которых будет иметь их собственное i
указатель, но оба i
указатели будут иметь то же значение, указывающее на тот же адрес в памяти - так да, это будет мелкая копия.