Trium918 Posted January 28, 2014 Share Posted January 28, 2014 <?php class FileStorage { function FileStorage($path, $shoutLog = false) { $this->shoutLog = $shoutLog; $folder = 'logs'; if (!is_dir($folder)) $folder = '../' . $folder; if (!is_dir($folder)) $folder = '../' . $folder; $this->path = $folder . '/' . $path . '.txt'; } $show_path= new FileStorage; echo $show_path ->FileStorage(); ?> What is the correct way to call the class FileStorage's object? I am trying to test the class to see if it is working. Link to comment https://forums.phpfreaks.com/topic/285740-calling-classes-and-objects/ Share on other sites More sharing options...
denno020 Posted January 28, 2014 Share Posted January 28, 2014 $show_path = new FileStorage(); echo $show_path->FileStorage($path); That should work.. Make sure you do it outside the class definition, or inside another function within that class that is called externally. Hopefully that helps Denno Link to comment https://forums.phpfreaks.com/topic/285740-calling-classes-and-objects/#findComment-1466846 Share on other sites More sharing options...
cyberRobot Posted January 28, 2014 Share Posted January 28, 2014 I'm assuming that's not your entire class definition. Does your complete class have a __construct() method? If not, the FileStorage() method may be used as the constructor and be called twice. Also note that the echo statement isn't going to do anything since FileStorage() doesn't return a value. Link to comment https://forums.phpfreaks.com/topic/285740-calling-classes-and-objects/#findComment-1466848 Share on other sites More sharing options...
Trium918 Posted January 28, 2014 Author Share Posted January 28, 2014 On 1/28/2014 at 1:36 PM, cyberRobot said: I'm assuming that's not your entire class definition. Does your complete class have a __construct() method? If not, the FileStorage() method may be used as the constructor and be called twice. Also note that the echo statement isn't going to do anything since FileStorage() doesn't return a value. <?php class FileStorage { function FileStorage($path, $shoutLog = false) { $this->shoutLog = $shoutLog; $folder = 'logs'; if (!is_dir($folder)) $folder = '../' . $folder; if (!is_dir($folder)) $folder = '../' . $folder; $this->path = $folder . '/' . $path . '.txt'; } function open($lock = false) { $this->handle = fopen($this->path, 'a+'); if ($lock) { $this->lock(); return $this->load(); } } function close(&$array) { if (isset($array)) $this->save($array); $this->unlock(); fclose($this->handle); unset($this->handle); } function load() { if (($contents = $this->read($this->path)) == null) return $this->resetArray(); return unserialize($contents); } function save(&$array, $unlock = true) { $contents = serialize($array); $this->write($contents); if ($unlock) $this->unlock(); } function unlock() { if (isset($this->handle)) flock($this->handle, LOCK_UN); } function lock() { if (isset($this->handle)) flock($this->handle, LOCK_EX); } function read() { fseek($this->handle, 0); //return stream_get_contents($this->handle); return file_get_contents($this->path); } function write($contents) { ftruncate($this->handle, 0); fwrite($this->handle, $contents); } function resetArray() { if ($this->shoutLog) $default = array( 'info' => array( 'latestTimestamp' => -1 ), 'posts' => array() ); else $default = array(); $this->save($default, false); return $default; } } ?> Here is the complete class. I am trying to figure out why this class isn't writing to the log file. Link to comment https://forums.phpfreaks.com/topic/285740-calling-classes-and-objects/#findComment-1466857 Share on other sites More sharing options...
cyberRobot Posted January 28, 2014 Share Posted January 28, 2014 Based on a cursory look, the class doesn't have any properties. http://www.php.net/manual/en/language.oop5.properties.php However, the class is attempting to use properties which haven't been defined. $this->shoutLog = $shoutLog; Link to comment https://forums.phpfreaks.com/topic/285740-calling-classes-and-objects/#findComment-1466859 Share on other sites More sharing options...
Psycho Posted January 28, 2014 Share Posted January 28, 2014 The method 'FileStorage' is the constructor for the class. It has two parameters: $path and $shoutLog. The $path parameter is required. When you instantiate the class you must pass at least that first parameter. It looks like it is used as a sub-path within the folder 'logs' for storing the log files. Link to comment https://forums.phpfreaks.com/topic/285740-calling-classes-and-objects/#findComment-1466862 Share on other sites More sharing options...
Trium918 Posted January 29, 2014 Author Share Posted January 29, 2014 On 1/28/2014 at 3:24 PM, Psycho said: The method 'FileStorage' is the constructor for the class. It has two parameters: $path and $shoutLog. The $path parameter is required. When you instantiate the class you must pass at least that first parameter. It looks like it is used as a sub-path within the folder 'logs' for storing the log files. I am having problems writing to the file called logs. Link to comment https://forums.phpfreaks.com/topic/285740-calling-classes-and-objects/#findComment-1466920 Share on other sites More sharing options...
Psycho Posted January 29, 2014 Share Posted January 29, 2014 On 1/29/2014 at 12:36 PM, Trium918 said: I am having problems writing to the file called logs. And if there are problems in instantiating/setting up the class you will have problems with anything else within the class. I can't believe you are not getting errors since you are not even passing the required parameter to the class. Link to comment https://forums.phpfreaks.com/topic/285740-calling-classes-and-objects/#findComment-1466945 Share on other sites More sharing options...
cyberRobot Posted January 29, 2014 Share Posted January 29, 2014 On 1/29/2014 at 12:36 PM, Trium918 said: I am having problems writing to the file called logs. Have you attempted to fix the class (and the references to the class)? If so, it may help to post the updated code. Link to comment https://forums.phpfreaks.com/topic/285740-calling-classes-and-objects/#findComment-1466949 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.