PHP provides a function that lets you override the default session mechanism by specifying the names of your own functions for taking care of the distinct tasks
The handler PHP uses to handle data serialization is defined by the session.serialize_handler configuration directive. It is set to php by default.
REPLACE
REPLACE, which behaves exactly like INSERT, except that it handles cases where a record already exists with the same session identifier by first deleting that record.
the _write() function keeps the timestamp of the last access in the access column for each record, this can be used to determine which records to delete.
Before accessing variables within objects and collections make sure they are there! PLEASE!
If that variable is a constant or won't be changed then use the Const keyword in applicable languages and the CAPITALISATION convention to let users aware of your decisions about them.
The name of a method is more important than we give it credit for, when a method changes so should its name.
Make sure you are returning the right thing, trying to make it as generic as possible.
Void should do something, not change something!
Private vs Public, this is a big topic
keeping an eye of the access level of a method can stop issues further down the line
Gherkin is a Business Readable, Domain Specific Language created especially for behavior descriptions.
specify the 3 main points of a test, including what you expect to happen using the following keywords GIVEN, WHEN / AND , THEN.
look at how the code is structured, make sure methods aren't too long, don't have too many branches, and that for and if statements could be simplified.
Use your initiative and discuss if a rewrite would benefit maintainability for the future.
it's unnecessary to leave commented code when working in and around areas with them.
Do not use directories as a dependency for generated targets, ever.
Parallel make: add an explicit timestamp dependency (.done) that make can synchronize threaded calls on to avoid a race condition.
Maintain clean targets - makefiles should be able to remove all content that is generated so "make clean" will return the sandbox/directory back to a clean state.
Wrapper check/unit tests with a ENABLE_TESTS conditional
= 在執行時擴展(values within it are recursively expanded when the variable is used, not when it's declared)
:= 在定義時擴展(values within it are expanded at declaration time)