Проверьте этот вопрос / ответ . Это более кратко, чем @Geoff, и также использует встроенную функцию fputcsv.
$result = $db_con->query('SELECT * FROM `some_table`');
if (!$result) die('Couldn\'t fetch records');
$num_fields = mysql_num_fields($result);
$headers = array();
for ($i = 0; $i < $num_fields; $i++) {
$headers[] = mysql_field_name($result , $i);
}
$fp = fopen('php://output', 'w');
if ($fp && $result) {
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="export.csv"');
header('Pragma: no-cache');
header('Expires: 0');
fputcsv($fp, $headers);
while ($row = $result->fetch_array(MYSQLI_NUM)) {
fputcsv($fp, array_values($row));
}
die;
}
Многие люди уже заявили, что автоматические свойства являются синтаксическим сахаром - краткий способ записать простые свойства. Я буду иметь дело с различиями между общедоступной переменной и общественной собственностью и почему при переключении между этими двумя необходимо было бы перекомпилировать. Возьмите следующее:
public class MyClass
{
public int MyPublicVariable = 0;
public int MyPublicProperty
{
get;
set;
}
}
Когда-то скомпилированный, концептуально , это на самом деле заканчивает тем, что было подобно следующему:
public class MyClass
{
public int MyPublicVariable = 0;
private int MyPublicProperty = 0;
public int get_MyPublicProperty()
{
return MyPublicProperty;
}
public void set_MyPublicProperty( int value )
{
MyPublicProperty = value;
}
}
Давным-давно, свойства были изобретены, чтобы быть быстрым и простым способом определить пар, добираются и методы установки. Это сделало код более читаемым и легче понять, когда они передали намерение и гарантировали непротиворечивость.
MyClass myClass = new MyClass();
myClass.MyPublicVariable = 2;
myClass.MyPublicProperty = 2;
Когда-то скомпилированный, снова концептуально , это заканчивает тем, что было подобно следующему:
MyClass myClass = new MyClass();
myClass.MyPublicVariable = 2;
myClass.set_MyPublicProperty( 2 );
Так, одна из причин предпочтения общественных собственностей по общедоступным переменным - то, если необходимо использовать другую логику, поскольку код развивается тогда, потребители кода должны не обязательно перекомпилировать. Поэтому это часто считают лучшей практикой. Это - также причина, которую автоматические свойства были изобретены - для ускорения вдоль кода, пишущего при поддержании этой лучшей практики.
также были некоторые комментарии об интерфейсах. Интерфейсы являются по существу контрактом, который гарантирует присутствие определенных методов в любом классе, реализовывая их. Как мы знаем от вышеупомянутого, свойства представляют один или два метода, таким образом, они работают просто великолепно в интерфейсах.
Hope это помогает немногому.
Вот другой пример, который может представлять интерес:
public class MyClass
{
private int[] _myArray = new int[ 5 ];
public int MyArray[ int index ]
{
get
{
return _myArray[ index ];
}
set
{
_myArray[ index ] = value;
}
}
}
public class MyClass
{
private int[] _myArray = new int[ 5 ];
public int get_MyArray( int index )
{
return _myArray[ index ];
}
public void set_MyArray( int index, int value )
{
_myArray[ index ] = value;
}
}
отметьте: Я не могу точно помнить сигнатуры методов, используемые при декомпиляции свойств. Я думаю, что это - 'get_XXX' и 'set_XXX', но это могло быть что-то еще, что очень похоже. Пока понимание там, оно, вероятно, не имеет значения слишком много. В конце они все становятся адресами памяти так или иначе:-)