Предполагаю, что вы выполняете все вышеуказанного кода каждый раз, когда вы что-то пишете в файл. Каждый раз, когда поток для файла открывается, его указатель поиска позиционируется в начале, поэтому все записи в конечном итоге переписывают то, что было до этого.
Вы можете решить проблему двумя способами: либо с удобным
file2 = new StreamWriter("c:/file.txt", true);
или путем прямого позиционирования указателя потока:
file2 = new StreamWriter("c:/file.txt");
file2.BaseStream.Seek(0, SeekOrigin.End);
Потому что property_exists
сообщит вам, даже если это определенное свойство класса / объекта, где as isset не делает этого различия. например:
class A {
protected $hello;
}
class B {
}
при использовании property_exists ($ this, 'hello')
в классе A вернет true
, при использовании в классе B вернет false
. isset
вернет false
в обоих экземплярах.
Это зависит от того, как работает ваша программа, но если вы прочитаете комментарии в руководстве, это поможет объяснить особенности функции.
http://php.net/manual/en/function.property-exists.php
Важная часть находится здесь:
В документации отсутствует важный случай новой недвижимости вы добавлять к объектам во время выполнения. По факту, property_exists вернет истину, если Вы спрашиваете его о таких свойствах.